Maison  >  Article  >  Java  >  Dois-je créer de nouveaux PreparedStatements pour chaque opération SQL ou réutiliser la même ?

Dois-je créer de nouveaux PreparedStatements pour chaque opération SQL ou réutiliser la même ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-31 22:42:02305parcourir

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

Réutilisation d'une instruction PreparedStatement pour plusieurs opérations

Dans les scénarios où une seule connexion est utilisée sans pool de connexions, une question se pose concernant l'approche à suivre créer et utiliser des PreparedStatements. Une option consiste à créer une nouvelle instance PreparedStatement pour chaque opération SQL/DML :

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

Alternativement, la même instance PreparedStatement peut être réutilisée en effaçant ses paramètres et en réinitialisant les valeurs :

<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();

Recommandation et considérations multithread

Pour une efficacité optimale, envisagez d'exécuter les opérations PreparedStatement par lots :

<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>

Lorsque vous travaillez avec des environnements multithread, il est crucial d'acquérir et fermez les connexions et les instructions dans la portée la plus courte possible au sein du même bloc de méthode. Suivre l'idiome JDBC en utilisant try-with-resources garantit que la gestion des ressources est gérée de manière appropriée.

Pour les lots transactionnels, désactivez la validation automatique sur la connexion et ne validez qu'une fois que tous les lots se sont terminés avec succès pour éviter d'éventuelles incohérences de base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn