Java 与h2数据库的并发性

Java 与h2数据库的并发性,java,database,concurrency,h2,Java,Database,Concurrency,H2,我有一个表xxx,它的id(id_xxx int AUTO_INCREMENT)和name(name_xxx varchar(50)), 在我创建的表中插入新行时​​: INSERT INTO xxx VALUES ​​("name for test"); 然后返回插入的结果(int=1),然后在我的java界面中显示一条消息“succeed!”,直到现在这是一个非常基本和简单的操作。。。 但是 当我想返回插入的id_xxx时,我必须对数据库进行另一次查询: INSERT INTO xxx V

我有一个表xxx,它的id(id_xxx int AUTO_INCREMENT)和name(name_xxx varchar(50)), 在我创建的表中插入新行时​​:

INSERT INTO xxx VALUES ​​("name for test");
然后返回插入的结果(int=1),然后在我的java界面中显示一条消息“succeed!”,直到现在这是一个非常基本和简单的操作。。。 但是 当我想返回插入的id_xxx时,我必须对数据库进行另一次查询:

INSERT INTO xxx VALUES ​​("name for test");
//after the insert response I made:
SELECT MAX (id_xxx) FROM xxx;
我在java界面中显示“succeed$$$是您的id\u xxx”

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

(我希望我的例子是清楚的,否则我将计划这个问题)


如何解决此问题?

您应该能够检索由
插入
查询生成的密钥,请参阅。

您应该能够检索由
插入
查询生成的密钥,请参阅