2012-02-03 127 views
1

我有ID的表XXX(id_xxx INT AUTO_INCREMENT)和名称(name_xxx VARCHAR(50)), 当我插入我做表一个新行:并发与H2数据库

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执行选择最大(id_xxx)H2DB返回A FALSE id_xxx ...

(我希望我的例子很明显,否则我会模式化这个问题)。

如何解决这个问题?

回答