事务提交批量向多张表中插入数据
时间: 2023-08-16 15:05:06 浏览: 124
可以使用数据库事务来实现向多张表中插入数据的批量提交。具体实现步骤如下:
1. 开启事务。
2. 定义需要插入的数据。
3. 对每张表分别执行插入操作,将需要插入的数据逐条添加到 SQL 语句中。
4. 提交事务或者回滚事务。
下面是一个示例代码,用于向两张表中插入数据:
```
import java.sql.*;
public class BatchInsertDemo {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement stmt = null;
try {
// 获取数据库连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
// 开启事务
conn.setAutoCommit(false);
// 定义需要插入的数据
String[][] data = {{"John", "Doe", "john.doe@example.com"}, {"Jane", "Doe", "jane.doe@example.com"}};
// 对每张表分别执行插入操作
for (String[] row : data) {
// 向表1中插入数据
stmt = conn.prepareStatement("INSERT INTO table1 (first_name, last_name) VALUES (?, ?)");
stmt.setString(1, row[0]);
stmt.setString(2, row[1]);
stmt.executeUpdate();
// 向表2中插入数据
stmt = conn.prepareStatement("INSERT INTO table2 (email) VALUES (?)");
stmt.setString(1, row[2]);
stmt.executeUpdate();
}
// 提交事务
conn.commit();
} catch (SQLException e) {
// 回滚事务
try {
if (conn != null) {
conn.rollback();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
e.printStackTrace();
} finally {
try {
// 关闭数据库连接
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
```
在上面的示例代码中,我们使用了 `Connection` 类的 `setAutoCommit(false)` 方法来关闭自动提交事务,然后使用 `commit()` 方法提交事务或者使用 `rollback()` 方法回滚事务。在循环中,我们对每张表分别执行插入操作,将需要插入的数据逐条添加到 SQL 语句中。最后,我们关闭了 `PreparedStatement` 对象和数据库连接。
阅读全文