Page précédenteIndexPage suivante

8.4- Les accès aux SGDB ( JDBC )

Généralités

Nous trouvons dans la plupart des architectures distribuées un ou plusieurs SGBD ( Système de Gestion de Base de Données ). Pour effectuer des requêtes dans ces bases, nous disposons de deux technologies principales:

Ces différents drivers permettent d'accéder indifféremment à la plupart des SGBD.


Effectuer une requête par l'exemple

Dans cet exemple commenté, nous allons effectuer un requête simple : 'select sysdate from dual;' dans une instance Oracle en utilisant le driver fourni par oracle. Cet exemple est très simple car la requête ne renvoie qu'une seule ligne et une seule colonne.

Le DriverManager.

Le package java.sql comprend la classe DriverManager qui gère les drivers. En standard, java.sql possède un driver fourni par Sun. Dans notre cas, nous allons charger le driver d'Oracle pour Oracle 8i. Pour utiliser un nouveau driver, il faut l'enregistre par la méthode statique DriverManager.registerDriver(Driver)

Charger le driver JDBC

Pour obtenir l'objet Driver en argument de registerDriver, nous allons charger le driver fourni par Oracle et s'appelant oracle.jdbc.OracleDriver.class puis nous allons en créer une instance.

Class cOracleDriver=Class.forName("oracle.jdbc.OracleDriver");

Remarque: La méthode forName() renvoie un objet Class et est utilisée lorsque le nom de la classe à utiliser n'est pas connu par avance.

Puis nous instancions un objet Driver :

Driver dOracleDriver=cOracleDriver.newInstance();

La méthode newInstance() renvoie une instance sur la classe.

Remarque: Nous utilisons cette méthode d'obtention d'un objet pour trois raisons:

Cependant, si nous connaissons à l'avance la base et le driver à utiliser, il suffira de faire:

Driver dOracleDriver=new OracleDriver(); à condition d'avoir fait un import de oracle.jdbc.*;

Enregistrer le driver dans le 'set' du DriverManager.

DriverManager.registerDriver(dOracleDriver);

Créer une connexion au SGBD via un objet Connection

Connection cConnection=DriverManager.getConnection("url","user","pwd");

Les arguments sont tous des chaînes de caractères. Le String 'url' est normalisé. Pour une connexion JDBC Oracle via le thin driver c'est-à-dire le driver léger, le 'connection string' sera:

"jdbc:oracle:thin:@[ip]:[port]:[nom de l'instance]"

Pour une connexion via pont ODBC/JDBC:

"jdbc:odbc:@[ip]:[port]:[nom de l'instance]"

Ouvrir un statement sur la connexion

L'objet Statement gère les requêtes et les accès au SGBD.

Statement sStat=cConnection.createStatement();

Effectuer une requête qui renvoie un objet ResultSet à exploiter

ResultSet rsResult=sStat.executeQuery("requete");

La requête est contenue dans une chaîne de caractère sans ';'

Afficher le résultat de la requete

Le ResultSet qui est une énumération est positionné à sa première valeur puis son contenu est affiché pour une colonne donnée. Ainsi, par la méthode rsResult.next(), nous explorons les lignes et la méthode getObject(index) permet d'explorer les valeurs dans les colonnes pour une ligne donnée. Dans notre exemple très simple, nous n'aurons qu'une ligne et qu'une colonne.

rsResult.next();
System.out.println(rsResult.getObject(1));

La première colonne du ResultSet est à l'index un et non zéro.

Fermer le resultSet

C'est indispensable pour effectuer les requêtes suivantes.

rsResult.close();

Listing complet

import java.sql.*;
import oracle.jdbc.driver.*;
class TestJDBC{
    String sQuery;
    TestJDBC(){
        this.sQuery="select sysdate from dual";
        Statement sStat=null;
        Connection cCon=null;
        try{
            Class cDriverOracle=Class.forName("oracle.jdbc.driver.OracleDriver");
            Driver dDriverOracle=(java.sql.Driver)cDriverOracle.newInstance();
            DriverManager.registerDriver(dDriverOracle);
            cCon=DriverManager.getConnection("jdbc:oracle:thin:@10.31.12.14:1521:ORCL","scott","tiger");
        }
        catch(Exception e){
            System.out.println("--Pbm en chargeant le driver JDBC oracle--");
            e.printStackTrace();
        }
        try{
           sStat=cCon.createStatement();
            ResultSet rs=sStat.executeQuery(sQuery);
            rs.next();
            System.out.println("Resultat requete: "+rs.getObject(1));
            sStat.close();
        }
        catch(Exception sqlE){
            System.out.println("La Requête n'a pas abouti");
            sqlE.printStackTrace();
        }
    }

    public static void main(String[] sArgs){

        TestJDBC tj=new TestJDBC();
    }
}

Tutorial SUN:

http://developer.java.sun.com/developer/onlineTraining/Database/JDBCShortCourse/index.html





Page précédenteIndexPage suivante