When attempting to efficiently insert numerous rows into a MySQL table, one may encounter limitations with传统的 PreparedStatement 方式,因为无法在 PreparedStatement 中事先确定需要插入的行数。
为了优化插入过程,MySQL 提供了批量插入语法,如下所示:
INSERT INTO table (col1, col2) VALUES ('val1', 'val2'), ('val1', 'val2')[, ...]
使用 PreparedStatement 进行批量插入
使用 PreparedStatement 进行批量插入的步骤如下:
示例代码:
public void save(List<Entity> entities) throws SQLException { try ( Connection connection = database.getConnection(); PreparedStatement statement = connection.prepareStatement(SQL_INSERT); ) { int i = 0; for (Entity entity : entities) { statement.setString(1, entity.getSomeProperty()); // ... statement.addBatch(); i++; if (i % 1000 == 0 || i == entities.size()) { statement.executeBatch(); // Execute every 1000 items. } } } }
需要注意的是,执行批量插入时,建议每隔一定数量的行(例如 1000)执行一次,因为某些 JDBC 驱动程序或数据库可能对批量长度有限制。
相关参考:
以上是如何使用PreparedStatement高效地将多行插入MySQL?的详细内容。更多信息请关注PHP中文网其他相关文章!