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. Utiliser des pilotes légers dans le développement de logiciels clients
.En termes de développement de logiciels Java, la base de données Oracle fournit quatre types de pilotes, dont deux sont utilisés pour les logiciels clients tels que les logiciels d'application, les applets et les servlets, et les deux autres sont utilisés pour logiciels clients tels que les logiciels d'application, les applets et les servlets Logiciels côté serveur tels que les procédures stockées Java dans les bases 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
Lors de la première connexion avec la base de données, par défaut, la connexion est en mode de soumission automatique. Pour de meilleures performances, vous pouvez désactiver la fonction autocommit en appelant la méthode setAutoCommit() de la classe Connection avec un paramètre booléen false, comme suit :
conn.setAutoCommit(false);
Il est à noter qu'une fois la fonction autocommit 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 des commandes SQL dynamiques ou 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 la fonction 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 d'accomplir ces tâches 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 des objets PreparedStatement pour exécuter des commandes SQL, les commandes sont analysées et compilées par la base de données, puis placées 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 pour traiter les opérations d'insertion ou de mise à jour répétées par lots
Si vous traitez les opérations d'insertion et de mise à jour par lots, vous pouvez réduire considérablement le temps nécessaire. 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 suit :
PreparedStatement pstmt3D null;
try
{
(
(OraclePreparedStatement)
pstmt).setExecuteBatch
(30)
;
() est une limite supérieure lorsque cette valeur est atteinte, l'exécution de la commande SQL sera automatiquement déclenchée et la méthode standard executeUpdate() sera envoyée à la base de données sous forme de traitement par lots. Nous pouvons transférer des tâches batch à tout moment en appelant la méthode sendBatch() de la classe PreparedStatement.
7. Utilisez la méthode de localisation Oracle pour insérer et mettre à jour des objets volumineux (LOB).
La classe PreparedStatement d'Oracle ne prend pas entièrement en charge le traitement des objets volumineux tels que BLOB et CLOB. En particulier, le pilote Thin ne prend pas en charge la configuration à l'aide de setObject(). et setBinaryStream() de l'objet PreparedStatement. La valeur de BLOB ne prend pas en charge la définition de la valeur de CLOB à l'aide de la méthode setCharacterStream(). Seules les méthodes du localisateur lui-même peuvent obtenir les valeurs de type LOB à partir de la base de données. Vous pouvez utiliser des objets PreparedStatement pour insérer ou mettre à jour des LOB, mais vous devez utiliser un localisateur pour obtenir la valeur du LOB. En raison de ces deux problèmes, je recommande d'utiliser la méthode locator pour insérer, mettre à jour ou obtenir des valeurs LOB.
8. Utiliser la syntaxe SQL92 pour appeler des procédures stockées
.Lors de l'appel de procédures stockées, nous pouvons utiliser SQL92 ou Oracle PL/SQL. L'utilisation d'Oracle PL/SQL ne présente aucun avantage pratique et posera des problèmes aux développeurs qui maintiendront votre application. l'avenir pose des problèmes, c'est pourquoi je recommande d'utiliser SQL92 lors de l'appel de procédures stockées.
9. Utilisez Object SQL pour transférer le schéma objet vers la base de données.
Étant donné que la base de données Oracle peut être utilisée comme base de données orientée objet, vous pouvez envisager de transférer le schéma orienté objet de l'application vers la base de données. L'approche actuelle consiste à créer des beans Java sous forme d'objets de base de données déguisés, à mapper leurs propriétés dans des tables relationnelles, puis à ajouter des méthodes à ces beans. Bien que cela ne pose aucun problème en Java, les opérations étant effectuées en dehors de la base de données, les autres logiciels d'application qui accèdent à la base de données ne peuvent pas tirer parti du modèle objet. Si vous tirez parti de la technologie orientée objet d'Oracle, vous pouvez simuler ses données et ses opérations dans la base de données en créant un nouveau type d'objet de base de données, puis utiliser des outils tels que JPublisher pour générer vos propres classes de bean Java. Si vous utilisez cette méthode, non seulement les applications Java peuvent utiliser le modèle objet du logiciel d'application, mais d'autres logiciels d'application qui doivent partager les données et les opérations dans votre application peuvent également utiliser le modèle objet du logiciel d'application.
10. Utilisez SQL pour effectuer des opérations dans la base de données.L'expérience
la plus importante que je souhaite vous présenter est d'utiliser pleinement l'approche orientée ensemble de SQL pour résoudre les besoins de traitement de la base de données, plutôt que d'utiliser des langages de programmation procéduraux tels que Java.
Si le programmeur devait rechercher plusieurs lignes dans une table, chaque ligne du résultat rechercherait des données dans d'autres tables. Enfin, le programmeur a créé des commandes UPDATE distinctes pour mettre à jour les données de la première table par lots. Une tâche similaire à celle-ci peut être accomplie dans une commande UPDATE en utilisant une sous-requête multicolonne dans la clause set. Pourquoi laisser les données circuler sur Internet alors que vous pouvez accomplir la tâche avec une seule commande SQL ? Je recommande aux utilisateurs d'apprendre attentivement comment maximiser la puissance de SQL.
Auteur : picva Source : Communauté technologique CCID