【问题标题】:concurrency with h2 database与 h2 数据库的并发性
【发布时间】:2012-02-03 13:52:49
【问题描述】:

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

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”....

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

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

如何解决这个问题?

【问题讨论】:

    标签: java database concurrency h2


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-05
      • 2011-10-21
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 2011-01-17
      • 1970-01-01
      相关资源
      最近更新 更多