首页  >  文章  >  Java  >  我应该为每个 SQL 操作创建新的PreparedStatements 还是重复使用相同的语句?

我应该为每个 SQL 操作创建新的PreparedStatements 还是重复使用相同的语句?

Patricia Arquette
Patricia Arquette原创
2024-10-31 22:42:02305浏览

 Should I create new PreparedStatements for each SQL operation or reuse the same one?

重用一个PreparedStatement进行多个操作

在没有连接池的情况下使用单个连接的情况下,有一个关于如何处理的问题创建和使用PreparedStatements。一种选择是为每个 SQL/DML 操作创建一个新的PreparedStatement实例:

<code class="java">for (int i=0; i<1000; i++) {
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setObject(1, someValue);
    preparedStatement.executeQuery();
    preparedStatement.close();
}

或者,可以通过清除其参数并重新设置值来重用同一个PreparedStatement实例:

<code class="java">PreparedStatement preparedStatement = connection.prepareStatement(sql);
for (int i=0; i<1000; i++) {
    preparedStatement.clearParameters();
    preparedStatement.setObject(1, someValue);
    preparedStatement.executeQuery();
}
preparedStatement.close();

建议和多线程注意事项

为了获得最佳效率,请考虑批量执行PreparedStatement操作:

<code class="java">public void executeBatch(List<Entity> entities) throws SQLException { 
    try (
        Connection connection = dataSource.getConnection();
        PreparedStatement statement = connection.prepareStatement(SQL);
    ) {
        for (Entity entity : entities) {
            statement.setObject(1, entity.getSomeProperty());
            // ...
            statement.addBatch();
        }

        statement.executeBatch();
    }
}</code>

在多线程环境中工作时,获取和在同一方法块内尽可能短的范围内关闭连接和语句。遵循 JDBC 习惯用法,使用 try-with-resources 确保资源管理得到适当处理。

对于事务批处理,请在连接上禁用自动提交,并仅在所有批处理成功完成后才提交,以避免潜在的数据库不一致。

以上是我应该为每个 SQL 操作创建新的PreparedStatements 还是重复使用相同的语句?的详细内容。更多信息请关注PHP中文网其他相关文章!

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