使用 JDBC 批量操作
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
使用 JDBC,您可以轻松地使用 addBatch() 方法一次执行多个语句。本质上,JDBC 中有两种模式
- 执行多个没有绑定值的查询
- 使用绑定值多次执行一个查询
使用 JDBC
在代码中,这看起来像以下代码片段
// 1. several queries
// ------------------
try (Statement stmt = connection.createStatement()) {
stmt.addBatch("INSERT INTO author(id, first_name, last_name) VALUES (1, 'Erich', 'Gamma')");
stmt.addBatch("INSERT INTO author(id, first_name, last_name) VALUES (2, 'Richard', 'Helm')");
stmt.addBatch("INSERT INTO author(id, first_name, last_name) VALUES (3, 'Ralph', 'Johnson')");
stmt.addBatch("INSERT INTO author(id, first_name, last_name) VALUES (4, 'John', 'Vlissides')");
int[] result = stmt.executeBatch();
}
// 2. a single query
// -----------------
try (PreparedStatement stmt = connection.prepareStatement("INSERT INTO author(id, first_name, last_name) VALUES (?, ?, ?)")) {
stmt.setInt(1, 1);
stmt.setString(2, "Erich");
stmt.setString(3, "Gamma");
stmt.addBatch();
stmt.setInt(1, 2);
stmt.setString(2, "Richard");
stmt.setString(3, "Helm");
stmt.addBatch();
stmt.setInt(1, 3);
stmt.setString(2, "Ralph");
stmt.setString(3, "Johnson");
stmt.addBatch();
stmt.setInt(1, 4);
stmt.setString(2, "John");
stmt.setString(3, "Vlissides");
stmt.addBatch();
int[] result = stmt.executeBatch();
}
使用 jOOQ
jOOQ 支持如下批量模式执行查询
// 1. several queries
// ------------------
create.batch(
create.insertInto(AUTHOR, ID, FIRST_NAME, LAST_NAME).values(1, "Erich" , "Gamma" ),
create.insertInto(AUTHOR, ID, FIRST_NAME, LAST_NAME).values(2, "Richard", "Helm" ),
create.insertInto(AUTHOR, ID, FIRST_NAME, LAST_NAME).values(3, "Ralph" , "Johnson" ),
create.insertInto(AUTHOR, ID, FIRST_NAME, LAST_NAME).values(4, "John" , "Vlissides"))
.execute();
// 2. a single query
// -----------------
create.batch(create.insertInto(AUTHOR, ID, FIRST_NAME, LAST_NAME ).values((Integer) null, null, null))
.bind( 1 , "Erich" , "Gamma" )
.bind( 2 , "Richard" , "Helm" )
.bind( 3 , "Ralph" , "Johnson" )
.bind( 4 , "John" , "Vlissides")
.execute();
当使用单个查询和多个绑定值创建批量执行时,您仍然需要为原始查询提供 jOOQ 虚拟绑定值。 在上面的示例中,这些值设置为 null。 对于后续对 bind() 的调用,jOOQ 将不提供类型安全。
反馈
您对此页面有任何反馈吗? 我们很乐意听到它!