首页 >Java >java教程 >如何使用PreparedStatement高效地将多行插入MySQL?

如何使用PreparedStatement高效地将多行插入MySQL?

Barbara Streisand
Barbara Streisand原创
2024-11-26 13:44:10844浏览

How Can I Efficiently Insert Multiple Rows into MySQL Using PreparedStatements?

使用PreparedStatement插入多个MySQL行

要优化MySQL表中的行插入,您可以利用支持的语法:

INSERT INTO table (col1, col2) VALUES ('val1', 'val2'), ('val1', 'val2')[, ...]

但是,如果要动态插入的行数,使用PreparedStatement即可

将PreparedStatement与AddBatch一起使用

要使用PreparedStatement动态插入多行,您可以使用addBatch()方法创建一个批处理,并使用executeBatch()执行它。

这是一个示例:

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 不可行,插入多行的替代方法包括:

  • 对每一行使用PreparedStatement的insert()方法,具有潜在的性能限制。
  • 使用 Statement 对象,允许一次执行多个 SQL 语句。

参考:

  • [ JDBC 教程 - 使用PreparedStatement](https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html)
  • [JDBC 教程 - 使用 Statement 对象进行批量更新](https://docs.oracle .com/javase/tutorial/jdbc/basics/batchupdates.html)

以上是如何使用PreparedStatement高效地将多行插入MySQL?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn