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!