使用 JDBC (Oracle),我需要向三个不同的表中插入数千行。基本上,我想在一个循环中一个接一个地执行 3 个插入 SQL 语句。
我读了这个链接,我想知道哪个实现更好(就执行时间而言):
- 批量执行第一条SQL语句,取回生成的key
- 使用步骤 1 中生成的密钥批量执行第二条 SQL 语句并检索新生成的密钥
- 使用步骤 1 和 2 中生成的键执行第三条 SQL 语句
或者循环遍历每条记录以插入,并为每条记录一个接一个地执行 3 个 SQL 语句。
我知道第一个实现是依赖于数据库的(因为ResultSet.getGeneratedKeys()
不是每个数据库都支持)。也许还有我没有想到的第三种实现?
我想使用单个连接,因此,对于这两种实现,我将首先获得一个连接,进行每次插入,最后提交并关闭连接。
另外,我想知道我是否可以使用任何 Spring JDBC 抽象。第二种实现似乎可以使用 Spring JdbcTemplace(包装方法@Transactional
以使用相同的连接),但第一种看起来很困难,因为 JdbcTemplate 的方法 batchUpdate 不返回生成的密钥。