① 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;
如果不是很清楚的话,你可以再上网查一下具体的触发器写法,祝你成功!