如何在mysql插入记录时同时取得该记录的id

水牛叔叔 发布于 2012/07/04 16:53
阅读 3K+
收藏 0
我有一个数据库的id生成策略是auto_increment,我想在往某张表插入记录时,返回刚刚插入记录的id,有办法吗?注意我这个是多线程应用
加载中
0
qycms_cn
qycms_cn
看来是菜鸟,看mysql的函数,有last_insert_id这样的方法,基本可以得到最后insert id
水牛叔叔
水牛叔叔
确实是菜鸟。好答案,谢谢,握手
0
hey周小周
hey周小周

应该是获取序列下一个值。

水牛叔叔
水牛叔叔
答案找到了,谢谢
0
yuzhouliu
yuzhouliu

connection.setAutoCommit(false);
stmt = connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
stmt.executeUpdate();
ResultSet keys = stmt.getGeneratedKeys();
if(keys.next()){
   key = keys.getLong(1);
}
connection.commit();

 

0
水牛叔叔
水牛叔叔

引用来自“yuzhouliu”的答案

connection.setAutoCommit(false);
stmt = connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
stmt.executeUpdate();
ResultSet keys = stmt.getGeneratedKeys();
if(keys.next()){
   key = keys.getLong(1);
}
connection.commit();

 

这个答案更佳,连并发访问造成的问题也解决了,谢谢
0
sxgkwei
sxgkwei
难道你持久层没有用框架而是JDBC?哦,卖糕的。。。
sxgkwei
sxgkwei
回复 @水牛叔叔 : -.-!!!
水牛叔叔
水牛叔叔
dbutil
0
yuzhouliu
yuzhouliu

引用来自“水牛叔叔”的答案

引用来自“yuzhouliu”的答案

connection.setAutoCommit(false);
stmt = connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
stmt.executeUpdate();
ResultSet keys = stmt.getGeneratedKeys();
if(keys.next()){
   key = keys.getLong(1);
}
connection.commit();

 

这个答案更佳,连并发访问造成的问题也解决了,谢谢
记得采纳,好歹给个分呀
水牛叔叔
水牛叔叔
不好意思,我只有8分
0
逝水fox
逝水fox

引用来自“水牛叔叔”的答案

引用来自“yuzhouliu”的答案

connection.setAutoCommit(false);
stmt = connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
stmt.executeUpdate();
ResultSet keys = stmt.getGeneratedKeys();
if(keys.next()){
   key = keys.getLong(1);
}
connection.commit();

 

这个答案更佳,连并发访问造成的问题也解决了,谢谢

如果是在多个线程里面共享一个Connection的话,这个写法从根本上解决不了并发访问的问题,不过代码确实脱离底层数据库的特有实现。一个Connection在使用期间,最好是只能属于单一线程,直到线程使用完毕返还他,类似的实现如线程池,否则会出现创建的Statement自动关闭的情况。

last_insert_id()返回的是一个连接会话的变量last_insert_id。如果每个线程各自用各自的Connection,相互之间是不会冲突的。

yuzhouliu
yuzhouliu
回复 @逝水fox : 我写个的这个例子中,connection 正是从数据库连接池里获取的,每个 connection用完之后 close 掉就可以。
逝水fox
逝水fox
回复 @水牛叔叔 : 恩这样不会冲突的,就怕同一个连接同时被两个线程使用
水牛叔叔
水牛叔叔
connection 要的时候到connectionPool里拿的,不会冲突
0
HelloChina
HelloChina
mysql_insert_id();返回刚插入看ID
0
红宝石
红宝石
hibernate返回当前object
返回顶部
顶部