与h2数据库并发

时间:2012-02-03 13:52:50

标签: java database concurrency h2

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

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

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

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

我在我的java界面中显示“succseed $$$是你的id_xxx”....

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

(我希望我的例子很清楚,否则我会将这个问题图示化)。

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您应该能够检索insert查询生成的密钥,请参阅5.1.4 Retrieving Automatically Generated Keys