① java如何在資料庫主鍵按順序自動生成
<hibernate-mapping>
<class name="com.so.pojo.City" table="CITY" schema="SOP">
<id name="id" type="java.lang.String">
<column name="ID" length="50" />
<generator class="native"></generator>
</id>
<property name="name" type="java.lang.String">
<column name="NAME" length="100" />
</property>
<property name="parent" type="java.lang.String">
<column name="PARENT" length="50" />
</property>
</class>
</hibernate-mapping>
用hibernate:
我的資料庫中有一個表示city,主鍵是id設置<generator class="native"></generator>就可以自動增長,就不用自己管了
② 在java中 主鍵生成策略(hibernate)都是指的是id的嗎
主鍵生成策略是指 <grnerator class="native"/>
1、 native
對於 oracle 採用 Sequence 方式,對於MySQL 和 SQL Server 採用identity(自增主鍵生成機制),native就是將主鍵的生成工作交由資料庫完成,hibernate不管(很常用)
2、assigned
在插入數據的時候主鍵由用戶自己添加,hibernate也不管(很常用)
3、increment
插入數據的時候hibernate會給主鍵添加一個自增的主鍵,但是一個hibernate實例就維護一個計數器,所以在多個實例運行的時候不能使用這個方法
4、sequence
調用資料庫的sequence來生成主鍵,要設定序列名,不然hibernate無法找到:
<param name="sequence">NAME_SEQ</param>(Oracle中很常用)
5、identity
使用SQL Server 和 MySQL 的自增欄位,這個方法不能放到 Oracle 中,Oracle 不支持自增欄位,要設定sequence(MySQL 和 SQL Server 中很常用)
6、hilo
使用hilo生成策略,要在資料庫中建立一張額外的表,默認表名為hibernate_unique_key,默認欄位為integer類型,名稱是next_hi(比較少用)
我們也可以自己設置自定義的表名和欄位名
<id name="id" type="integer">
<column name="id"/>
<generator class="hilo">
<param name="my_unique_key"/>
<param column="next_hi"/>
</generator>
</id>
7、sehilo
通過hilo演算法實現,但是主鍵歷史保存在Sequence中,適用於支持 Sequence 的資料庫,如 Oracle(比較少用)
8、uuid.hex
hibernate會算出一個128位的唯一值插入
9、uuid.string
hibernate會算出一個16位的值插入
10、foreign
使用外部表的欄位作為主鍵
11、select
使用觸發器生成主鍵(主要用於早期的資料庫主鍵生成機制,少用)
③ oracle主鍵自增 在java中怎麼設置
可以創建一個序列
-- Create sequence
create sequence SEQ_TEXT
minvalue 1
maxvalue 9999
start with 60
increment by 1
cache 20;
在插入數據的時候
INSERT INTO STUDENT(ID,NAME) VALUES(SEQ_TEXT.NEXTVAL,'張三');
這樣就可以了!
④ 為什麼java 中Derby主鍵自增每次都加100
據了解,derby資料庫對記錄項的預緩存項數就是100,
在你資料庫操作後沒有正常關閉資料庫和連接的情況,就會導致緩存中的[前一插入位置]丟失。
這個項可以在derby的設置屬性derby.language.sequence.preallocator中改,但縮小後緩存變小影響性能,應該去解決流程中的錯誤...
另外,作為鍵值(而不是數值),重點在保障唯一性,正確設計下即使增100也不影響...
⑤ Java程序連接Oracle資料庫時怎麼設置主鍵自增
在oracle中主鍵是不能自增的,不過可以創建一個序列
-- Create sequence
create sequence SEQ_TEXT
minvalue 1
maxvalue 9999
start with 60
increment by 1
cache 20;
在插入數據的時候
INSERT INTO STUDENT(ID,NAME) VALUES(SEQ_TEXT.NEXTVAL,'張三');
這樣就可以了
⑥ java中如何獲得自增長主鍵表中新插入行的主鍵 資料庫是sql server 2000.
如果主鍵值是
自增欄位就可以
insert
...
Select
@@identity
insert
into
userInfo
(loginName,loginPass,blance)
values('1','123',23)
Select
@@identity
這樣些sql語句就可以了
求滿意
⑦ java往資料庫sql中添加數據,怎麼讓主鍵自增
首先,你如果想把id列設置為自增列,直接在資料庫中將其設置為自增列就可以了。
然後,等你添加數據的時候使用如下的語句:
INSERTINTOdingdan(sname,snumber,rname,rnumber,address,beizhu,cdate)VALUES(?,?,?,?,?,?,?)
資料庫會自動幫你添加id列的值。 所以,你的這個代碼可以改為:
StringinsertCondition="INSERTINTOdingdan(sname,snumber,rname,rnumber,address,beizhu,cdate)VALUES(?,?,?,?,?,?,?)";
sql=con.prepareStatement(insertCondition);
sql.setString(1,handleString(sname));
sql.setString(2,handleString(snumber));
sql.setString(3,handleString(rname));
sql.setString(4,handleString(rnumber));
sql.setString(5,handleString(address));
sql.setString(6,handleString(beizhu));
sql.setTimestamp(7,newTimestamp(System.currentTimeMillis()));//獲取系統當前時間
intm=sql.executeUpdate();
⑧ java 用 jdbc 插入一條信息返回當前信息的主鍵id 怎樣寫 oracle的資料庫 主鍵序列自增
有兩種方法可以設置主鍵,一種是自增長主鍵,另一種就是生成唯一序列。
一、自增長主鍵
--首先建一個表TEST
create table TEST
(
NID int PRIMARY KEY,
test1 varchar2(20),
test2 varchar2(20),
test3 varchar2(20),
test4 varchar2(20),
test5 varchar2(20)
)
-- 再建一個序列SEQ_TEST
create sequence SEQ_TEST
minvalue 1 --最小值
nomaxvalue --不設置最大值
start with 1 --從1開始計數
increment by 1 --每次加1個
nocycle --一直累加,不循環
nocache; --不建緩沖區
以上代碼完成了一個序列(sequence)的建立過程,名稱為SEQ_TEST,范圍是從1開始到無限大(無限大的程度是由你機器決定的),nocycle 是決定不循環,如果你設置了最大值那麼你可以用cycle 會使seq到最大之後循環.對於nocache順便說一下如果你給出了cache值那麼系統將自動讀取你的cache值大小個seq,這樣在反復操作時會加快運行速度,但如果遭遇意外情況如當機了或Oracle死了,則下次取出的seq值將和上次的不連貫.(如果連不連貫無所謂建議用cache,因為時間就是金錢呀!)
你只有了表和序列還不夠,最好再建一個觸發器來執行它!代碼如下:
CREATE OR REPLACE TRIGGER tg_test
BEFORE INSERT ON test FOR EACH ROW WHEN (new.nid is null)
begin
select seq_test.nextval into:new.nid from al;
end;
下面是測試
select * from test
insert into test(nid,test1) values(6,'aaa')
insert into test(test1) values('bbb')
⑨ Java程序連接Oracle資料庫時怎麼設置主鍵自增,不涉及框架技術的
從表的鍵值改掉再更新主表的鍵值。
例如:CREATE OR REPLACE TRIGGER TRG_觸發器名 --創建觸發器
BEFORE INSERT OR UPDATE --意思是在插入或更新操作之前
ON 主表名 --為主表創建
REFERENCING OLD AS OLDROW NEW AS NEWROW --定義數據行
FOR EACH ROW
BEGIN
IF INSERTING THEN
--向主表插入時做的操作
ELSE
--更新主表時做的操作
--Update 從表的操作寫在這里就可以。
END IF;
END;
如果不是很清楚的話,你可以再上網查一下具體的觸發器寫法,祝你成功!