web-dev-qa-db-fra.com

Quelle est l'utilisation réelle de Class.forName ("Oracle.jdbc.driver.OracleDriver") lors de la connexion à une base de données?

Quelle sera la commande

Class.forName("Oracle.jdbc.driver.OracleDriver")

faire exactement en se connectant à une base de données Oracle? Y a-t-il une autre façon de faire la même chose?

86
Aravind

Il obtient une référence à l'objet de classe avec le FQCN (nom de classe qualifié complet) Oracle.jdbc.driver.OracleDriver.

Il ne "fait" rien en termes de connexion à une base de données , à part de s'assurer que la classe spécifiée est chargée par le chargeur de classes actuel . Il n'y a pas de différence fondamentale entre l'écriture

Class<?> driverClass = Class.forName("Oracle.jdbc.driver.OracleDriver");
// and
Class<?> stringClass = Class.forName("Java.lang.String");

Class.forName("com.example.some.jdbc.driver") appels apparaissent dans héritage du code qui utilise JDBC car c'est l'héritage moyen de charger un pilote JDBC .

De Le Java Tutorial :

Dans les versions précédentes de JDBC, pour obtenir une connexion, vous deviez d'abord initialiser votre pilote JDBC en appelant la méthode Class.forName. Cette méthode nécessitait un objet de type Java.sql.Driver. Chaque pilote JDBC contient une ou plusieurs classes qui implémentent l'interface Java.sql.Driver.
...
Tous les pilotes JDBC 4.0 trouvés dans votre chemin de classe sont automatiquement chargés. (Cependant, vous devez charger manuellement tous les pilotes antérieurs à JDBC 4.0 avec la méthode Class.forName.)

Lectures complémentaires (lire: questions c'est un dup de)

66
Matt Ball

Il enregistre le conducteur; quelque chose de la forme:

public class SomeDriver implements Driver {
  static {
    try {
      DriverManager.registerDriver(new SomeDriver());
    } catch (SQLException e) {
      // TODO Auto-generated catch block
    }
  }

  //etc: implemented methods
}
13
McDowell

Depuis le tutoriel JDBC sur Java :

Dans les versions précédentes de JDBC, pour obtenir une connexion, vous deviez d'abord initialiser votre pilote JDBC en appelant la méthode Class.forName. Tous les pilotes JDBC 4.0 trouvés dans votre chemin de classe sont automatiquement chargés. (Cependant, vous devez charger manuellement tous les pilotes antérieurs à JDBC 4.0 avec la méthode Class.forName.)

Ainsi, si vous utilisez le pilote Oracle 11g (11.1) avec Java 1.6, vous n'avez pas besoin d'appeler Class.forName. Sinon, vous devez l'appeler pour initialiser le pilote.

6
Jonathan

Une alternative consisterait à tilisez la propriété système jdbc.drivers pour spécifier vos pilotes requis sur la ligne de commande lorsque vous démarrez la machine virtuelle Java.

1
sudocode

Cette commande charge la classe du pilote Oracle jdbc d'être disponible pour l'instance DriverManager. Une fois la classe chargée, le système peut se connecter à Oracle à l'aide de cette classe. Vous pouvez également utiliser la méthode registerDriver de DriverManager et la transmettre avec l’instance du pilote JDBC dont vous avez besoin.

1
anatolich

Avant Java 6, la classe DriverManager n'aurait pas su quel pilote JDBC vous vouliez utiliser. Class.forName("...") était un moyen de précharger les classes de pilotes.

Si vous utilisez Java 6, vous n'avez plus besoin de le faire.

1
Qwerky