Connexion JDBC - Classe.forName vs Classe.forName().newInstance?
Me demandais pourquoi les deux Class.forName("com.mysql.jdbc.Driver");
et Class.forName("com.mysql.jdbc.Driver").newInstance();
travail lorsque je les utilise pour se connecter à une base de données. En droit, n'est-ce pas l'ancien pas censé travailler, depuis pas de nouvelle instance a été créée. Et pourtant, il fonctionne toujours. Im en utilisant netbeans 6.9.1. Merci pour vos commentaires!
OriginalL'auteur OckhamsRazor | 2011-01-09
Vous devez vous connecter pour publier un commentaire.
Class.forName("xxx")
ne veut pas créer une connexion à la base de données, tout charge le pilote JDBC et l'enregistre donc une autreDriverManager.getConnection(...)
appel travail. L'instanciation de la pilote vous-même n'est pas nécessaire.Je soupçonne que juste par le chargement de la classe, le gestionnaire de pilote a déjà instancié, déclenchée par un bloc statique dans le pilote. Pour être honnête, je ne suis pas entièrement sûr. Si vous voulez utiliser le pilote que vous avez instancié (par exemple, de s'enrouler autour d'elle), vous devez éviter d'utiliser DriverManager pour obtenir des connexions, ou enregistrer votre propre instance de pilote à l'aide de la DriverManager méthodes statiques.
OriginalL'auteur araqnid
Avec un pilote qui prend en charge de jdbc 4.0, vous n'avez même pas besoin de la Classe.forName().
Le pilote est censé avoir dans la construction de mécanisme pour se charger à la volée,
lorsque DriverManager recherche.
(ref: http://download.oracle.com/javase/6/docs/api/java/sql/DriverManager.html)
Le DriverManager méthodes 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.Le pilote. Ce fichier contient le nom des pilotes JDBC de la mise en œuvre de java.sql.Le pilote. Par exemple, pour charger le mon.sql.La classe du pilote, le META-INF/services/java.sql.Pilote fichier contiendra l'entrée:
mon.sql.Pilote
Applications ne doivent plus explicitement charger des pilotes JDBC à l'aide de la Classe.forName(). Les programmes existants actuellement charger des pilotes JDBC à l'aide de la Classe.forName() continuera de fonctionner sans modification.
OriginalL'auteur voiddrum