forName(String)
de la classe
Class
, puis par appel de la méthode
newInstance()
. Cette procédure est pratique, car il n’y a pas besoin de connaître le pilote au moment de l’écriture du code. Il est parfaitement possible de le passer en paramètre au moment du lancement de l’application.
Ensuite, il faut déclarer le pilote au niveau du
DriverManager
, par appel à la méthode statique
registerDriver(Driver)
. Cet objet se chargera enfin de la contruction de l’objet connexion à la base de données. Cet objet peut connaître autant de pilotes qu’on peut lui en donner, et c’est lui qui, au vu de la chaîne de connexion qu’il reçoit, va choisir le bon pilote et créer l’objet de type
Connection
.
Le pilote est une classe qui implémente l’interface
Driver
. Cette interface contient une méthode principale :
connect()
, à laquelle il faut passer comme paramètres l’URL de la base et les identifiants de connexion pour pouvoir établir une connexion à la base de données.
Outre
registerDriver(Driver)
et
deregisterDriver(Driver)
, la classe
DriverManager
possède des méthodes qui permettent de configurer les pilotes qu'elle gère.
forName(String)
de la classe
Class
nous renvoie une instance de
Class
. On ne lui fournit qu’une chaîne de caractères qui représente le nom complet du pilote. Une fois cette instance créée, le
DriverManager
connaît automatiquement le pilote, et il est possible de demander une connexion sur la base.
L’avantage de cette méthode est que l’on n’a pas besoin du pilote au moment de la compilation. Il suffit juste de connaître son nom complet. La machine Java n’aura besoin d’avoir ce pilote dans son espace de nom que lors de son chargement.
L’instanciation de ce pilote peut se faire par l’appel à la méthode statique
newInstance()
de la classe
Class
. Elle nous renvoie un objet de type
Driver
, interface implémentée par tous les pilotes JDBC.
Cette méthode était la méthode préconisée dans les anciennes version du JDK et de JDBC. De nouveaux mécanismes ont été apportés à Java 6, qui permettent de procéder de façon plus simple et purement déclarative. Notamment, il n'est plus nécessaire de charger explicitement la classe du pilote, ni même de l'instancier.
registerDriver(Driver)
de la classe
DriverManager
. On passe en paramètre l’instance du pilote que l’on vient de construire.
jdbc.drivers
:
$ java –Djdbc.drivers=com.mysql.jdbc.Driver TestDBLa seconde consiste a utiliser une fonctionnalité de Java 6. Lors du chargement d'un JAR, Java 6 examine le contenu du répertoire
META-INF
de ce JAR. S'il y trouve un fichier
services/java.sql.Driver
, alors il l'ouvre, charge les classes définies dans ce fichier, et les enregistre en tant que pilotes JDBC. On pourra se reporter à la documentation de la classe
java.util.ServiceLoader
pour plus d'informations sur cette fonctionnalité.
Exemple 2. Contenu du fichier
META-INF/services/java.sql.Driver
oracle.jdbc.OracleDriver com.mysql.jdbc.Driver
DataSource
. Ces objets sont passés au code appelant, soit par requête JNDI, soit par injection directe. Un objet de type
DataSource
possède une méthode
getConnection()
qui nous retourne notre objet
Connection
classique.
Il n'est pas besoin de disposer d'un serveur JEE pour utiliser des sources de données. On peut utiliser la bibliothèque Apache DBCP (
http://commons.apache.org/dbcp) pour ce faire, dont le fonctionnement de base est très simple. Notons que DBCP est elle-même utilisée dans de nombreux serveurs JEE open-source.
DBCP fournit plusieurs implémentations de l'interface
DataSource
, dont la plus simple est
BasicDataSource
. Voyons un exemple simple d'utilisation.
Exemple 3. Création d'une source de données DBCP
BasicDataSource ds = new BasicDataSource() ; ds.setDriverClassName("com.mysql.jdbc.Driver") ; ds.setUsername("scott") ; ds.setPassword("tiger") ; ds.setUrl("jdbc:mysql::3306/db_test") ; Connection conn = ds.getConnection() ;
Tableau 3. Principaux pilotes JDBC
Base de données | Classe du pilote | Référence |
---|---|---|
MySQL |
com.mysql.jdbc.Driver
|
http://www.mysql.com/
|
Apache Derby |
org.apache.derby.jdbc.EmbeddedDriver
|
http://db.apache.org/derby/
|
PostgreSQL |
org.postgresql.Driver
|
http://www.postgresql.org/
|
SQLite |
org.sqlite.JDBC
|
http://www.sqlite.org/
|
HSQLDB |
org.hsqldb.jdbcDriver
|
http://hsqldb.org/
|
Oracle |
oracle. jdbc.driver.OracleDriver
|
http://www.oracle.com/
|
SQLServer |
com.microsoft.jdbc.sqlserver.SQLServerDriver et
net.sourceforge.jtds.jdbc.Driver
|
http://www.microsoft.com/sqlserver/ et
http://jtds.sourceforge.net/
|