我有一个表xxx,其ID为(id_xxx int AUTO_INCREMENT)和名称(name_xxx varchar(50)),
当我在表格中插入新行时:

INSERT INTO xxx VALUES ​​("name for test");


并返回插入的结果(int = 1),然后在Java界面中显示一条消息“成功!”,直到现在这是一个非常基本且简单的操作...
但,
当我想返回插入的id_xxx时,我必须对数据库进行另一个查询:

INSERT INTO xxx VALUES ​​("name for test");
//after the insert response I made:
SELECT MAX (id_xxx) FROM xxx;


然后在Java界面中显示“成功的$$$是您的id_xxx”...。

第二个版本在同时访问多个用户时很容易导致严重错误:
想象一个情况,当user1进行插入...,然后该用户的H2DB中断操作然后执行user2的插入。
当user1执行select max(id_xxx)时,H2DB返回A FALSE id_xxx ...

(我希望我的例子很清楚,否则我将对该问题进行模式化)。

如何解决这个问题呢?

最佳答案

您应该能够检索由insert查询生成的键,请参见5.1.4 Retrieving Automatically Generated Keys

10-07 19:40
查看更多