62 votes

JDBC Class.forName vs DriverManager.registerDriver

Quelle est la différence entre forName méthode vs registerDriver pour charger et enregistrer un pilote JDBC?

84voto

Joachim Sauer Points 133411

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 et getDrivers 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 fichier META-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 de Class.forName() continuera à fonctionner sans modification.

20voto

David O'Meara Points 1892

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.

-1voto

Puce Points 13540

En plus de ce que Joachim Sauer a déjà mentionné à propos des pilotes JDBC 4, notez qu'en pratique, vous souhaitez généralement injecter un EntityManager (JPA) ou un DataSource en pool (et utiliser JdbcTemplate of Spring).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X