Quelle est la différence entre forName
méthode vs registerDriver
pour charger et enregistrer un pilote JDBC?
Réponses
Trop de publicités?Class.forName()
n'est pas directement liée à JDBC à tous. Simplement, il charge d'une classe.
La plupart du Pilote JDBC classes s'inscrire eux-mêmes dans leur initialiseurs statiques en appelant registerDriver()
.
registerDriver()
est le véritable appel que vous avez à peine jamais besoin d'appeler vous-même (sauf si vous écrivez votre propre pilote JDBC).
Notez que dans JDBC 4 vous ne devriez pas avoir besoin de ces si votre pilote JDBC est à jour, que les pilotes peuvent être trouvés en utilisant le service de localisation des mécanismes de la place (c'est à dire tout simplement laisser tomber cet appel, et ouvrez votre connexion comme d'habitude). Voir la documentaton d' DriverManager
pour les détails:
Le DriverManager méthodes d'
getConnection
etgetDrivers
ont été amélioré pour prendre en charge la Java Standard Edition Fournisseur de Services de mécanisme. JDBC 4.0 Pilotes doivent inclure le fichierMETA-INF/services/java.sql.Driver
. Ce fichier contient le nom des pilotes JDBC de la mise en œuvre de l'java.sql.Driver
. Par exemple, pour charger l'my.sql.Driver
classe, l'META-INF/services/java.sql.Driver
le fichier de contenir de l'entrée:my.sql.Driver
Les Applications ne doivent plus explicitement charger des pilotes JDBC à l'aide de
Class.forName()
. Les programmes existants actuellement charger des pilotes JDBC à l'aide deClass.forName()
continuera à fonctionner sans modification.
Ne jamais appeler DriverManager.registerDriver()
méthode manuelle. JDBC spec nécessite un pilote à s'inscrire lui-même lorsque la classe est chargée, et que la classe est chargée via Class.forName()
. Dans JDBC 4 les pilotes sont en mesure d'être chargé automatiquement juste en étant sur le chemin de classe.
DriverManager.registerDriver()
manuellement est potentiellement dangereux car il provoque effectivement le Pilote à être inscrit deux fois. Si votre code vous oblige à faire radier l'enregistrement d'un Conducteur à éviter une fuite de mémoire, alors vous serait en fin de compte n'révocation de l'enregistrement d'une fois et laisser une seconde instance enregistrée.