ホームページ  >  記事  >  Java  >  SQL 操作ごとに新しい PreparedStatement を作成する必要がありますか、それとも同じものを再利用する必要がありますか?

SQL 操作ごとに新しい PreparedStatement を作成する必要がありますか、それとも同じものを再利用する必要がありますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-31 22:42:02300ブラウズ

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

複数の操作で PreparedStatement を再利用する

接続プールなしで単一の接続が使用されるシナリオでは、 PreparedStatement の作成と使用。 1 つのオプションは、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>

マルチスレッド環境で作業する場合、取得および同じメソッド ブロック内の可能な限り短いスコープ内で接続とステートメントを閉じます。 try-with-resources を使用した JDBC イディオムに従うことで、リソース管理が適切に処理されることが保証されます。

トランザクション バッチの場合は、接続での自動コミットを無効にし、データベースの不整合の可能性を避けるために、すべてのバッチが正常に完了した後にのみコミットしてください。

以上がSQL 操作ごとに新しい PreparedStatement を作成する必要がありますか、それとも同じものを再利用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。