用JDBC如何获得刚刚插入记录的主键值(自动生成)

persist_yu20082009 2009-02-01 09:35:32
用JDBC如何获得刚刚插入记录的主键值(自动生成),在csdn中有人问过,不过没找到答案,请大家帮忙!!!
数据库 sql server 2005
...全文
1345 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不建议 使用 sql identity 这个 在实际项目中做不到 同步更新的效果哦
建议 你使用 国际化 uniqueidentifier
给你个简单的例子 可以参考

create table Demo
(
id identifier not null,
username varchar(16) not null,
)
insert into Demo values(newid(),'username');
mma135 2009-02-10
  • 打赏
  • 举报
回复
友情up
netsocket 2009-02-10
  • 打赏
  • 举报
回复
友情up
xql80329 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 Inhibitory 的回复:]
getGeneratedKeys()
[/Quote]
up
Inhibitory 2009-02-08
  • 打赏
  • 举报
回复
getGeneratedKeys()
yangfuchao418 2009-02-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bzwm 的回复:]
既然是自动生成,这个主键一定等于目前表中记录的总数啊。
[/Quote]别人删除了先些数据呢?
loveunittesting 2009-02-06
  • 打赏
  • 举报
回复
sqlserver driver 2005是jdbc3.0的吗?如果是就没问题了。
Buddha_sy 2009-02-03
  • 打赏
  • 举报
回复
晕了
关注中……
蓝色港湾 2009-02-03
  • 打赏
  • 举报
回复
你写用什么方法做的写入?写入的类会有返回,这就是该数据的主键值。
时光瞄 2009-02-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 beck_716 的回复:]
pstmt = conn.prepareStatement(sql,PreparedStatement.RETURN_GENERATED_KEYS);

jdbc驱动需要3.0的,jdk1.5,我在oracle数据库用过
[/Quote]
这个就是正解。。
paullbm 2009-02-03
  • 打赏
  • 举报
回复
建议楼主不必使用数据库自带的自增列(或序列),自己写一个能够生成ID的类反而更好用,也更通用!
paullbm 2009-02-03
  • 打赏
  • 举报
回复
建议楼主不必使用数据库自带的自增列(或序列),自己写一个能够生成ID的类反而更好用,也更通用!
denghan 2009-02-02
  • 打赏
  • 举报
回复
如果用微软自己的JDBC驱动(SQL Server 2000 Driver for JDBC ),不能在insert()后直接获得自动编号字段的值,因为它是基于JDBC2.0规范的。

JDBC3.0规范中有检索自动产生的关键字的方法。不过貌似微软的JDBC没有3.0的。

可以使用第三方提供的驱动。

比如:http://www.inetsoftware.de提供的Gate3驱动。

或者用这个:jTDs-The JDBC driver for MS-SQLServer
http://sourceforge.net/project/showfiles.php?group_id=33291
(这个以前用过,方法与MS-JDBC差别不大,不用改很多程序)

到sun的网站,你可以看到所有通过认证的JDBC驱动。

直接上Hibernate好了。
SINCE1978 2009-02-02
  • 打赏
  • 举报
回复
关注
huhk 2009-02-01
  • 打赏
  • 举报
回复
感觉上是要用事务,
beck_716 2009-02-01
  • 打赏
  • 举报
回复
pstmt = conn.prepareStatement(sql,PreparedStatement.RETURN_GENERATED_KEYS);

jdbc驱动需要3.0的,jdk1.5,我在oracle数据库用过
比特灵 2009-02-01
  • 打赏
  • 举报
回复
Mysql 里面有SQL支持 , sqlserver不知道。不过这种机制不通用,不是办法,LX有没有好办法?
persist_yu20082009 2009-02-01
  • 打赏
  • 举报
回复
关键是同步问题,如果10个人在同一时间插入数据,那这10条数据的主键值怎么正常获取(获得刚刚插入记录的主键值)?谢谢大家
bzwm 2009-02-01
  • 打赏
  • 举报
回复
既然是自动生成,这个主键一定等于目前表中记录的总数啊。
huhk 2009-02-01
  • 打赏
  • 举报
回复
回楼上,
在多线程下,你取的get ID可能是别人同时操作数据库写入的。
加载更多回复(3)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧