Annexe C
Accueil Remonter Annexe A Annexe B Annexe C Annexe D Annexe E

Mes projets : Labyrinthe 3D  Zoom Magazine  PFE - Back Orifice ENSI MAIL - SamiComputer - SQL Generator - Virtual Conference - SamiNavigator - Taquin - STP - Livre d'or - Mon diplôme - Lettre de Motivation - News - ENSI

Téléchargez notre video de promotion 

Tous ces liens sont sponsorisés par:

Bab el WEB

Comment ça Marche

guill.Net

 

ANNEXE C

 

 

        Initiation au JDBC

  

1                    Présentation de JDBC

La technologie JDBC (Java DataBase Connectivity) est une API de Java permettant de se connecter à des bases de données. Cette API possède des classes pour l'accès aux bases de données permettant d'exécuter des requêtes SQL (statiques ou dynamiques) et de récupérer les résultats. JDBC permet d'utiliser le langage Java pour les actions sur les bases de données et se charge des différentes étapes (la création d'une connexion à la base, l'envoi d'instructions SQL, l'exploitation des résultats provenant de la base).


2                   Architecture de JDBC

   2.1              Fonctionnement

  JDBC  utilise différents types de pilotes pour la connexion aux bases de données (fig. C.1).

 Fig. C.1 - Fonctionnement de MiddleWare JDBC

   

Certains pilotes permettent la connexion par l'intermédiaire d'une autre technologie (on parle de passerelle). Les passerelles JDBC-ODBC, permettant une connexion via un pilote ODBC (Open Database Connectivity) 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.
D'autres pilotes permettent la connexion directe a la base de données en convertissant les appels JDBC directement en appels spécifiques de la base.
Il y a aussi des pilotes communiquant par l'intermédiaire d'un protocole réseau.

     2.2              Description de l'interface

La Figure suivante (fig. C.2) donne l’architecture générale de l’interface JDBC.
 
 

 

 Fig. C.2- Architecture générale de l'interface JDBC

 

·                     La classe java.sql.DriverManager permet de charger un driver et de définir la base de la connexion.

·                     Les Connections correspondent à un canal de communication TCP vers une Base de Données. Elles gèrent les propriétés de la connexion (nom, mot de passe).

·                     Les Statement s'occupent des requêtes SQL simples sur une connexion (et créent des ResultSet).

·                     Les ResultSet gèrent les données résultant d'une requête, l'accès aux tuples

d'un résultat.

 3                    Etapes d'utilisation de JDBC

Nous allons détailler ici les étapes nécessaires à la mise en place d'une utilisation de JDBC. Les exemples fournis utiliserons une base Oracle8 et les drivers associés.

      3.1              1ère étape : Importer  les paquetages

Pour pouvoir utiliser les commandes JDBC, il faut importer les paquetages suivants :

import  java.sql.*  : Tous les objets et les méthodes relatifs aux bases de données sont présentes dans le package java.sql, il est donc indispensable de l'importer dans tout programme se servant de la technologie JDBC.

import oracle.jdbc.driver.*  et oracle.sql.* Pour avoir les pilotes Oracle.

      3.2          2éme étape : Déclarer la sélection des pilotes JDBC

       Il faut déclarer les pilotes utiles pour le programme. Cela se fait à partir de la méthode registerDriver() de la classe DriverManager.

Pour utiliser un des pilotes JDBC d'Oracle, il faut  le passer en paramètre de cette fonction.
exemple :  DriverManager.registerDriver (new oracle.jdbc.driver.OraceDriver());

      3.3          3ème étape : Ouvrir la connexion avec la base de donnée

On ouvre une connexion avec la base de données en utilisant la méthode statique getConnection() de la classe JDBC DriverManager. Cette méthode retourne un objet instance de la classe Connection.

La connexion s'effectue à partir de la connaissance de :

un identifiant d'utilisateur : user ID
un mot de passe pour l'utilisateur
Une chaîne de caractère qu représente le driver à utiliser
Le nom de la base de donnée à laquelle on veut se connecter.

 

Ces paramètres sont utilisés de la manière suivante dans getConnection() :

getConnection(String URL, String User, String Password)
où l'URL est de la forme : jdbc:oracle:<drivertype>:@database

Exemple :

con=DriverManager.getConnection(jdbc:oracle:thin:@doc:15:s8i","nom","password");

Remarque : il existe une autre possibilité pour créer une connexion : utiliser la fonction connect(class, file) qui établit la connexion a partir d'informations contenues dans un fichier que nous avons appelé « connect.properties » (ces informations sont les mêmes que pour l'utilisation explicitée ci-dessus : URL, User et Password).

 

Exemple :

Oracle.connect(getClass(), "connect.properties");

   3.4              4ème étape : créer un objet de type Statement

Une fois la connexion effectuée avec la base, et qu'on possède un objet instance de Connection, il faut créer un objet instance de Statement à partir de la fonction createStatement() qui est définie sur notre objet de type Connection. Pour reprendre la suite de l'exemple de l'étape précédente où une connexion avec un objet conn de type Connection a été établie, la création d'un objet de type Statement peut se faire de la manière suivante:

Statement stmt = conn.createStatement();

   3.5          5ème étape : exécuter les requêtes et récupérer les réponses

3.5.1        Construction d'une requête

Les requêtes peuvent être exécutées à partir de l'utilisation de la syntaxe suivante, appliquée sur un objet  de type Statement , qui a été auparavant créé :

stmt.executeUpdate("insert into Client values (...)");

Le Statement stmt envoie la requête SQL qui est passée en paramètre de la méthode executeUpdate.

        Certaines requêtes doivent fournir des résultats, comme par exemple les requêtes de type SELECT. Ce résultat est alors renvoyé sous forme d'objet instance de ResultSet. Cet objet est celui renvoyé par la méthode executeQuery sur le Statement.

ResultSet rs = stmt.executeQuery("select * from ...");

Remarque :  On peut également effectuer les requêtes différemment, en stockant la requête sous sa forme SQL dans un objet de type PreparedStatement avant de l'envoyer.
ex : PreparedStatement psmt = createStatement("select ... from ...");

et on récupère les données de la requête :

rs = psmt.executeQuery(); 

3.5.2        Récupération du résultat

Ensuite, des méthodes de la classe ResultSet permettent de traiter les accès aux colonnes des données reçues, soit directement, soit après extraction d'autres objets de type ResultSetMetaData (informations sur les colonnes) ou DataBaseMetaData (informations sur la base de données entière).

Les principales méthodes de l'objet ResultSet sont les suivantes:

·                     getInt(int): récupère sous forme d'entier le contenu d'une colonne désignée par son numéro

·                     getInt(String): récupère sous forme d'entier le contenu d'une colonne désignée par son nom

·                     getFloat(int): récupère sous forme de flottant le contenu d'une colonne désignée par son numéro

·                     getFloat(String): récupère sous forme de flottant le contenu d'une colonne désignée par son nom

·                     next(): déplace le pointeur de colonne sur la colonne suivante (renvoie FAUX s'il n'y en a plus)

·                     close(): « fermer l'objet »

·                     getMetaData(): retourne les métadonnées de l'objet (l'objet ResultSetMetaData)

L'objet ResultSetMetaData (obtenu de l'objet ResultSet) permet de connaître le nombre, le nom et le type de chaque colonne à l'aide des méthodes suivantes:

·                     getColumnCount(): récupère le nombre de colonnes

·                     getColumnName(int): récupère le nom de la colonne spécifiée

·                     getColumnLabel(int): récupère le label de la colonne spécifiée

·                     getColumnType(int): récupère le type de données de la colonne spécifiée.

 

   3.6          6ème étape : Refermer le Statement et la Connexion

Après avoir effectué les requêtes que l'on souhaitait sur la base, il faut explicitement fermer les objets Statement à l'aide de la méthode close(). Ce qui donne, sur notre exemple : stmt.close(); Il faut ensuite fermer également la connexion qui a été établie.