如何处理PreparedStatement中的批量插入?
时间: 2024-10-09 18:09:53 浏览: 79
在Java中,PreparedStatement通常用于执行预编译的SQL语句,包括批量插入。批量插入可以提高数据库性能,因为它避免了每次插入都解析、编译SQL的过程。以下是批量插入的基本步骤:
1. **创建PreparedStatement**: 创建一个PreparedStatement对象,该对象代表一个可以包含占位符的SQL INSERT语句。
```java
String sql = "INSERT INTO table_name (column1, column2, column3) VALUES (?, ?, ?)";
PreparedStatement pstmt = connection.prepareStatement(sql);
```
2. **添加数据**: 使用`setXXX()`方法设置每个占位符对应的值,这会自动增加PreparedStatement内部的批处理计数。
```java
for (int i = 0; i < data.size(); i++) {
Object[] row = data.get(i);
pstmt.setString(1, row[0]);
pstmt.setInt(2, row[1]);
pstmt.setDouble(3, row[2]); // 或者其他类型的值
}
// 如果是多个批次的数据,每次循环结束前调用addBatch(),而不是executeUpdate()
pstmt.addBatch();
```
3. **执行批量操作**: 执行完所有数据插入后,一次性提交事务来完成所有插入。
```java
if (batchSize > 0) {
int[] result = pstmt.executeBatch(); // 返回的是每个批次插入的行数
for (int inserted : result) {
System.out.println("Inserted " + inserted + " rows");
}
}
else {
pstmt.executeUpdate(); // 单条或多条数据直接执行
}
```
4. **关闭Statement**: 完成操作后别忘了关闭`PreparedStatement`和连接。
```java
pstmt.close();
connection.close();
```
阅读全文