-1

使用 JDBC (Oracle),我需要向三个不同的表中插入数千行。基本上,我想在一个循环中一个接一个地执行 3 个插入 SQL 语句。

我读了这个链接,我想知道哪个实现更好(就执行时间而言):

  1. 批量执行第一条SQL语句,取回生成的key
  2. 使用步骤 1 中生成的密钥批量执行第二条 SQL 语句并检索新生成的密钥
  3. 使用步骤 1 和 2 中生成的键执行第三条 SQL 语句

或者循环遍历每条记录以插入,并为每条记录一个接一个地执行 3 个 SQL 语句。

我知道第一个实现是依赖于数据库的(因为ResultSet.getGeneratedKeys()不是每个数据库都支持)。也许还有我没有想到的第三种实现?

我想使用单个连接,因此,对于这两种实现,我将首先获得一个连接,进行每次插入,最后提交并关闭连接。

另外,我想知道我是否可以使用任何 Spring JDBC 抽象。第二种实现似乎可以使用 Spring JdbcTemplace(包装方法@Transactional以使用相同的连接),但第一种看起来很困难,因为 JdbcTemplate 的方法 batchUpdate 不返回生成的密钥。

4

1 回答 1

1

如果执行时间不是问题,我会选择第二种方式。它不易出错,更容易被其他同事阅读。此外,您可以更好地控制交易。例如,您可以在 3 次插入完成后提交。

对于第一种方法:绕过GeneratedKeys您可以SELECT在第一组之后提出的问题INSERTs并获取 IDs( GeneratedKeys),然后使用检索到的 ID 进行第二组插入,依此类推......但我认为这很混乱。

还可以考虑使用存储过程

于 2013-04-27T13:09:59.287 回答