Source de l'article : Forum de base de données Auteur : jackma
L'API Java Database Connectivity (JDBC) est une série d'interfaces qui permettent aux programmeurs Java d'accéder aux bases de données. Les interfaces des différents développeurs ne sont pas exactement les mêmes. Après avoir utilisé JDBC d'Oracle pendant de nombreuses années, j'ai accumulé de nombreuses compétences qui peuvent nous permettre de mieux utiliser les performances du système et de réaliser davantage de fonctions.
1. Utilisez le pilote Thin dans le développement de logiciels clients
En termes de développement de logiciels Java, la base de données d'Oracle fournit quatre types de pilotes, deux pour les logiciels clients tels que les logiciels d'application, les applets et les servlets, et les deux autres pour les logiciels côté serveur tels que les procédures stockées Java dans la base de données. Dans le développement de logiciels côté client, nous pouvons choisir le pilote OCI ou le pilote Thin. Le pilote OCI utilise l'interface de localisation Java (JNI) pour communiquer avec la base de données via le logiciel client Oracle. Le pilote Thin est un pilote Java pur qui communique directement avec la base de données. Pour des performances maximales, Oracle recommande d'utiliser des pilotes OCI dans le développement de logiciels clients, et cela semble correct. Mais je recommande d'utiliser le pilote Thin, car grâce à de nombreux tests, il a été constaté que les performances du pilote Thin dépassent celles du pilote OCI dans des circonstances normales.
2. Désactivez la fonction de soumission automatique pour améliorer les performances du système
Lorsque vous établissez pour la première fois une connexion à la base de données, la connexion est en mode de validation automatique par défaut. Pour de meilleures performances, vous pouvez désactiver la fonctionnalité de validation automatique en appelant la méthode setAutoCommit() de la classe Connection avec un paramètre booléen false, comme indiqué ci-dessous :
conn.setAutoCommit(false);
Il est à noter qu'une fois la fonction de validation automatique désactivée, nous devons gérer manuellement la transaction en appelant les méthodes commit() et rollback() de la classe Connection.
3. Utilisez des objets Statement dans du SQL dynamique ou des commandes limitées dans le temps
Lors de l'exécution de commandes SQL, nous avons deux options : vous pouvez utiliser des objets PreparedStatement ou des objets Statement. Peu importe le nombre de fois que vous utilisez la même commande SQL, PreparedStatement ne l'analyse et ne la compile qu'une seule fois. Lors de l'utilisation de l'objet Statement, chaque fois qu'une commande SQL est exécutée, elle est analysée et compilée. Cela pourrait vous faire penser que l’utilisation d’objets PreparedStatement est plus rapide que l’utilisation d’objets Statement. Cependant, les tests que j'ai effectués montrent que dans le logiciel client, ce n'est pas le cas. Par conséquent, dans les opérations SQL limitées dans le temps, à moins que les commandes SQL ne soient traitées par lots, nous devrions envisager d'utiliser des objets Statement.
De plus, l'utilisation d'objets Statement facilite également l'écriture de commandes SQL dynamiques, car nous pouvons concaténer des chaînes pour créer une commande SQL valide. Par conséquent, je pense que l'objet Statement peut faciliter la création et l'exécution de commandes SQL dynamiques.
4. Utilisez des fonctions d'assistance pour formater les commandes SQL dynamiques
Lors de la création de commandes SQL dynamiques exécutées à l'aide d'objets Statement, nous devons résoudre certains problèmes de formatage. Par exemple, si nous voulons créer une commande SQL qui insère le nom O'Reilly dans une table, nous devons remplacer le signe "'" dans O'Reilly par deux signes "''" consécutifs. La meilleure façon de procéder consiste à créer une méthode d'assistance qui effectue l'opération de remplacement, puis à utiliser la méthode d'assistance créée lorsque la chaîne de connexion est exprimée sous forme de commande SQL à l'aide d'une formule. De même, nous pouvons demander à la méthode d'assistance d'accepter une valeur Date, puis de lui faire générer une expression de chaîne basée sur la fonction to_date() d'Oracle.
5. Utilisez les objets PreparedStatement pour améliorer l'efficacité globale de la base de données
Lorsque vous utilisez un objet PreparedStatement pour exécuter une commande SQL, la commande est analysée et compilée par la base de données, puis placée dans le tampon de commandes. Ensuite, chaque fois que le même objet PreparedStatement est exécuté, il sera à nouveau analysé, mais pas à nouveau compilé. Les commandes précompilées se trouvent dans le tampon et peuvent être réutilisées. Dans les applications de niveau entreprise avec un grand nombre d'utilisateurs, les mêmes commandes SQL sont souvent exécutées de manière répétée. La réduction du nombre de compilations provoquée par l'utilisation des objets PreparedStatement peut améliorer les performances globales de la base de données. À moins que la création, la préparation et l'exécution des tâches PreparedStatement côté client ne prennent plus de temps que les tâches Statement, je recommanderais d'utiliser les objets PreparedStatement dans tous les cas, à l'exception des commandes SQL dynamiques.
6. Utilisez les objets PreparedStatement dans le traitement par lots d'opérations d'insertion ou de mise à jour répétées <br /> <br /> Si les opérations d'insertion et de mise à jour sont traitées par lots, le temps requis pour leur réalisation peut être considérablement réduit. Les Statement et CallableStatement fournis par Oracle ne prennent pas vraiment en charge le traitement par lots. Seul l'objet PreparedStatement prend réellement en charge le traitement par lots. Nous pouvons choisir le traitement par lots JDBC standard à l'aide des méthodes addBatch() et executeBatch(), ou choisir la méthode propriétaire Oracle la plus rapide en utilisant la méthode setExecuteBatch() de l'objet PreparedStatement et la méthode standard executeUpdate(). Pour utiliser le mécanisme de traitement par lots propriétaire d'Oracle, vous pouvez appeler setExecuteBatch() comme indiqué ci-dessous :
PreparedStatement pstmt3D null ;
essayer {
((OraclePreparedStatement)
pstmt).setExecuteBatch(30);
...
pstmt.executeUpdate();
}