Chargement d’un pilote JDBC en Java
Chargement d’un pilote JDBC en Java
-
Objectifs
- Mettre en oeuvre l’API JDBC java.sql
-
Présentation
- JDBC est une API Java (ensemble de classes et d’interfaces défini par SUN et les acteurs du domaine des BD) permettant d’accéder aux bases de données à l’aide du langage Java via des requêtes SQL
- Cette API est une spécification de ce que doit implanter un constructeur de BD pour que celle ci soit interrogeable par JDBC. De ce fait dans la programmation JDBC on utilise essentiellement des références d’interface (Connection, Statement, ResultSet, …).
- Les constructeurs de BD se sont charger de fournir des classes qui implémentent les interfaces précitées qui permettent de soumettre des requêtes SQL et de récupérer le résultat.
-
Les types de pilotes JDBC
- Les pilotes sont classés en quatre types :
- Pilotes de type 1: Pilotes accèdant à une base de données par l’intermédiaire d’une autre technologie (on parle de passerelle). Les passerelles JDBC-ODBC, permettant une connexion via un pilote ODBC en sont l’exemple le plus courant. Le pilote convertit les appels de données Java en appel ODBC valide, et les exécute ensuite à l’aide du pilote ODBC
- Pilotes de type 2: Pilotes d’API natifs. Il s’agit d’un mélange de pilotes natifs et de pilotes Java. Les appels JDBC sont convertis en appels natifs pour le serveur de bases de données (Oracle, Sybase, ou autres) généralement en C ou en C++.
- Pilotes de type 3: Pilotes convertissant les appels JDBC en un protocole indépendant du SGBD. Un serveur convertit ensuite ceux-ci dans le protocole SGBD requis (modèle à 3 couches)
- Pilotes de type 4: Pilotes convertissant les appels JDBC directement en un protocole réseau exploité par le SGBD. Ces pilotes encapsulent directement l’interface cliente du SGBD et sont fournis par les éditeurs de base de données. Cette solution est à préconiser dans le cadre d’un intranet.
-
Les classes de l’API JDBC
- JDBC est une API Java (ensemble de classes et d’interfaces défini par SUN et les acteurs du domaine des BD) permettant d’accéder aux bases de données à l’aide du langage Java via des requêtes SQL. Cette API permet
d’atteindre de manière quasi-transparente des bases Sybase, Oracle, Informix, … avec le même programme Java JDBC. - cette API est une spécification de ce que doit implanter un constructeur de BD pour que celle ci soit interrogeable par JDBC. De ce fait dans la programmation JDBC on utilise essentiellement des références d’interface (Connection, Statement, ResultSet, …).
- java.sql.DriverManager :
- Elle prend en charge le chargement des pilotes et permet de créer de nouvelles connexions à des bases de données.
- Elle tient à jour, la liste principale des pilotes JDBC recensés du système.
- Cette classe est une classe qui ne contient que des méthodes statiques.
- Elle fournit des méthodes qui sont des utilitaires pour gérer l’accès aux bases de données par Java et les
différents drivers JDBC à l’intèrieur d’un programme Java - java.sql.Connection :
- java.sql.ResultSet :
- java.sql.Statement :
-
Le pilote d’une base de données
- Le pilote d’une base de données est tout simplement une classe Java instance de l’interface java.sql.Driver.
- il est possible de charger une classe Java explicitement dans le code, par appel de la méthode Class.forName().
- Chaque éditeur de base de données fournit une telle classe, généralement dans un JAR qui constitue le pilote complet. Le nom complet de cette classe varie donc d’un éditeur à l’autre.
- Pour chaque base, il faut donc trouver ce nom.
- MySQL
- Dans le cas de MySQL, il s’agit de:com.mysql.jdbc.Driver
- Access
- Dans le cas de Access, il s’agit de : com.jdbc.odbc.JdbcOdbcDriver
- Oracle
- Oracle fournit les pilotes JDBC suivants:
- Thin: Il est un pilote pur Java utilisé sur le côté client, sans l’installation du client Oracle.
==>Il peut être utilisé à la fois avec des applets et des applications. - Oracle Call Interface (OCI) driver: Il est utilisé sur le côté client avec une installation du client Oracle.
==>Il peut être utilisé uniquement avec les applications. - Server-côté conducteur interne: Il est utilisé pour le code qui s’exécute sur le serveur de base de données et accède à la même session.
==>Il peut être utilisé pour accéder à des données à partir d’une seule session Oracle. - Server-côté conducteur mince: Il est fonctionnellement identique au client-côté conducteur interne. Il est utilisé pour le code qui s’exécute sur le serveur de base de données et les besoins d’accéder à une autre session.
- Thin: Il est un pilote pur Java utilisé sur le côté client, sans l’installation du client Oracle.
- Oracle fournit les pilotes JDBC suivants:
-
chargement de pilote
- Pour se connecter à une base de données il est essentiel de charger dans un premier temps le pilote de la base de données à laquelle on désire se connecter grâce à un appel au DriverManager (gestionnaire de pilotes) : Class.forName(« nom.de.la.classe »);
- Cette instruction charge le pilote et crée une instance de cette classe.
- En effet, grâce à l’utilisation de cette classe, notre programme a la possibilité de rester totalement indépendant de la base de données utilisée en conservant le nom du pilote dans un fichier de propriétés.
- Pour se connecter à une base de données déclarée dans l’administrateur ODBC par exemple, il faut charger le pilote JDBC-ODBC (appelé pont JDBC-ODBC) : Class.forName(« sun.jdbc.odbc.JdbcOdbcDriver »);
- Pour se connecter à une base de données oracle , il faut charger le pilote : Class.forName( » oracle.jdbc.driver.OracleDriver « );
- Pour se connecter à une base de données mysql , il faut charger le pilote : Class.forName( » com.mysql.jdbc.Driver « );
- Quand une classe Driver est chargée, elle doit créer une instance d’elle même et s’enregistrer auprès du DriverManager
- Certains compilateurs refusant cette notation, il faut parfois appeler le driver de la façon suivante : Class.forName(« sun.jdbc.odbc.JdbcOdbcDriver »).newInstance();
- L’utilisation du chargement d’une classe au moment de l’exécution par la méthode Class.forName() requiers que celle-ci se trouve dans votre CLASSPATH.
- L’utilisation de la méthode Class.forName() peut lever une exception de type ClassNotFoundException.
il convient donc de placer le chargement du pilote dans un bloc sécurisé.
Par exemple Oracle fournit une classe: OracleStatement
Elle représente une connexion à une base de données.
Cette classe symbolise un ensemble de résultats dans la base de données et autorise l’accès aux résultats d’une requête rangée par rangée. Pendant le traitement de la requête, un ResultSet conserve un pointeur vers la rangée manipulée. L’application se déplace séquentiellement dans l’ensemble des résultats.
C’est une classe que l’application emploie pour transmettre des instructions à la base, elle représente une requête SQL. La fermeture d’un Statement engendre la fermeture automatique des tous les ResultSet associés.
Exemple :
Try
{
Class.forName(« oracle.jdbc.driver.OracleDriver ») ;
}
catch(ClassNotFoundException e)
{
System.err.println(« Erreur de chargement du driver : + e) ;
}