Java 与h2数据库的并发性
我有一个表xxx,它的id(id_xxx int AUTO_INCREMENT)和name(name_xxx varchar(50)), 在我创建的表中插入新行时: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
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
(我希望我的例子是清楚的,否则我将计划这个问题)
如何解决此问题?您应该能够检索由
插入
查询生成的密钥,请参阅。您应该能够检索由插入
查询生成的密钥,请参阅