从一个 table 中插入 max + 1 在两个不同的 table 中从 java 批量更新

Insert max + 1 from one table in two different table in batch update from java

我要求在 2 table 秒内自动增加值并具有引用关系。我的要求是在两个 table 中插入数据:- Table A = Rowid ,其他列 Table B = Rowid , 其他列 我需要在两个 table 中插入来自不同方法的数据。 目前,我采用了这种方法:- 一个。查询 Table A 中的最大值并加 1。 b.使用批量更新在步骤 1 中获得的值在两个 table 中插入数据。 但是,方法的缺陷是如果两个 users/threads 同时调用此方法,它们最终可能具有相同的值,我将在 Table A 和 Table B 上得到引用完整性错误具有相同行 ID 的 2 行。

我可以同步我的方法来避免这种情况,但是由于一些其他功能,我有多个不同的方法做同样的事情。

执行此操作的理想方法是使用自动生成的列,但 DBA 不允许这样做。此外,两个 table 之间的引用完整性需要由应用程序维护,DBA 不允许实际约束。

我在 java 端使用 Spring jdbctemplate,在数据库端使用 DB2。但是,问题与 poth 无关。

SELECT MAX()+1 不是为大量并发事务创建序列的可接受方式。

DBA 拒绝使用 ISOLATION LEVELIDENTITYSEQUENCE 对象等 DB2 的并发特性是不幸的。

有可以使用的应用程序解决方法:

将第一个语句包装在 FINAL TABLE 中以便 return 插入的值,包括为 TableA.rowid.

生成的 MAX()+1

使用准备语句的return键:

PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
PreparedStatement prepareStatement(String sql, String[] columnNames)

然后值 returned 应用到 TableB.rowid