MySQL JDBC PreparedStatement批量插入:在出错时继续插入数据

MySQL JDBC PreparedStatement批量插入:在出错时继续插入数据

在本文中,我们将介绍如何使用MySQL JDBC PreparedStatement批量插入数据,并在出错时继续插入剩余数据。

阅读更多:MySQL 教程

PreparedStatement批量插入数据

通常,我们使用JDBC向MySQL数据库中插入数据时,每插入一条数据都需要向数据库发起一次数据请求。这样会导致在插入大量数据时,性能较差。因此,我们可以使用PreparedStatement批量插入数据。

示例代码:

String SQL_INSERT = "INSERT INTO test_table (name, age) VALUES (?, ?)";
try (PreparedStatement ps = conn.prepareStatement(SQL_INSERT)) {
  ps.setString(1, "张三");
  ps.setInt(2, 25);
  ps.addBatch();
  ps.setString(1, "李四");
  ps.setInt(2, 26);
  ps.addBatch();
  ps.executeBatch();
}

在上述示例代码中,我们先创建一个预编译的SQL语句,并用占位符?表示待插入的数据。然后,我们通过setXXX()方法来设置占位符的实际值,并将插入操作添加到批量操作列表中。

最后,通过executeBatch()方法执行批量操作。

继续插入数据

在使用PreparedStatement批量插入数据时,如果出现错误,程序会抛出BatchUpdateException异常,并终止批量插入操作。但是,在实际应用中,我们有时需要在出错时继续插入剩余数据。

示例代码:

String SQL_INSERT = "INSERT INTO test_table (name, age) VALUES (?, ?)";
try (PreparedStatement ps = conn.prepareStatement(SQL_INSERT)) {
  ps.setString(1, "张三");
  ps.setInt(2, 25);
  ps.addBatch();
  ps.setString(1, "李四");
  ps.setInt(2, 26);
  ps.addBatch();
  ps.setString(1, "王五");
  ps.setInt(2, 27);
  ps.addBatch();
  int[] result = ps.executeBatch();
  int successCount = 0;
  for (int i = 0; i < result.length; i++) {
    if (result[i] >= 0) {
      successCount++;
    } else {
      System.err.println("第" + (i+1) + "条数据插入失败:" + result[i]);
    }
  }
  if (successCount < result.length) {
    System.err.println("有" + (result.length - successCount) + "条数据插入失败");
  }
}

在上述示例代码中,我们首先插入了3条数据,其中第3条数据会导致插入失败。然后,我们通过executeBatch()方法执行批量操作,并将每条操作的结果存储在数组result中。

接着,我们遍历数组result,对插入成功的操作计数,对插入失败的操作输出错误信息。最后,我们通过比较插入成功的操作计数和操作总数,判断是否有插入操作失败。

总结

在使用PreparedStatement批量插入数据时,我们可以通过executeBatch()方法执行批量操作,并通过BatchUpdateException异常处理插入错误。如果需要在错误时继续插入剩余数据,我们可以记录每条操作的结果,遍历结果数组并统计成功操作数。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程