获取java中数据库表的最后插入记录ID?

时间:2009-11-09 08:35:53

标签: java mysql jdbc

我有一个存储记录的数据库表A,A有一个带auto_increment的主键(recordid),每次我将记录插入A,我得到插入的记录并将其存储在另一个masterTable中。

我正在使用select语句,我很快就插入A来获取这样的记录:

通过recordid DESC LIMIT 1从A订单中选择recordid;

但是我今天遇到了一个问题,在同一时间插入了两个记录(由不同的线程),我最终在主id中存储了错误的记录ID(两个txns的记录都相同)

我听说过Statement.getGeneratedKeys(),我想知道这是否真的有助于解决问题。或者处理这个问题的最佳方法是什么。

3 个答案:

答案 0 :(得分:8)

您可以使用getGeneratedKeys方法。这个forum post会有所帮助。

我还建议您使用Hibernate之类的ORM工具。在Hibernate中你会做这样的事情:

myTable = new myTable();
myTable.prop1 = prop1;
myTable.prop2 = prop2;
int id = session.save(myTable);

Hibernate将发出相应的SQL命令(取决于所选的数据库)并返回自动生成的id。

答案 1 :(得分:3)

MySQL JDBC驱动程序支持getGeneratedKey()方法。请查看MySQL手册的20.3.5.1.4. Retrieving AUTO_INCREMENT Column Values部分:

  

我们演示了如何使用新的JDBC-3.0方法getGeneratedKeys(),如果需要检索AUTO_INCREMENT键,它现在是首选方法。

答案 2 :(得分:1)

在不支持generatedKeys的数据库中,您可以将ID转换为返回参数。例如,Oracle提供RETURNING xxx INTO?语法,其中xxx是您的列名。