next up previous
suivant: Optimiser l'accès aux BD monter: Les accès aux bases précédent: Applications OO et SGBD

Sous-sections

Accéder aux bases de données grâce à JDBC

L'API JDBC permet de formuler des requêtes SQL au sein des sources JAVA.

JDBC propose un ensemble d'interfaces et de classes. L'ensemble des classes d'implantation pour un SGBD est appelé pilote JDBC. On distingue quatre classes de pilote (plus ou moins évolué, le code est plus ou moins portable).

type 1 :
les pilotes accèdent aux données grâce à une technologie de ponts. Les ponts requièrent en général d'installer du code natif coté client. Exemple : le pont ODBC.
type 2 :
les pilotes appellent des méthodes C/C++ natives livrées par les éditeurs de SGBD. Il faut donc du code natif chez le client.
type 3 :
les pilotes fournissent au client une API réseau générique qui, traduite au niveau du serveur, permet d'accéder aux bases de données. Le pilote utilise des sockets avec une application intermédiaire sur le serveur; cette application convertit les requêtes en appel à l'API spécifique du pilote souhaité. Ces pilotes ont l'avantage de pouvoir interagir avec plusieurs SGBD différents.
type 4 :
les pilotes interagissent directement avec le SGBD. Ils sont en pur Java, portables et représentant souvent la solution ``optimale''. Ils sont exclusivement fournis par les éditeurs de SGBD.

les interfaces de JDBC

Driver :
tous les pilotes doivent respecter cet interface.
Statement :
la méthode execute sert pour exécuter les requêtes SQL. Deux sous-interfaces PreparedStatement et CallableStatement pour les instructions prédéfinies et les procédures stockées.
Connection :
pour établir la connexion à l'instance de la base de données.
ResultSet :
pour stocker le résultat (un ensemble) d'une requête SQL.
ResultSetMetaData et DatabaseMetaData :
pour accéder aux MetaTables du SGBD.

Se connecter et se déconnecter à la base de données

De l'utilisation des méthodes Class.forName() et DriverManager.getConnection();


    public static Connection etablirConnexion(String pilote,
                                       String url,
                                       String uid,
                                       String mdp) {
        Connection connexion = null;

        try {
            Class.forName(pilote);
        }
        catch(Exception e){
            System.out.println("Impossible de charger le pilote");
            return null;
        }
        try {
            connexion = DriverManager.getConnection(url, uid, mdp);
            System.out.println("Connexion etablie.");
        }
        catch(SQLException e){
            System.out.println("Impossible d'etablir la connexion");
            return null;
        }
        return connexion;
    }

mais aussi de la méthode close().


    public static void fermerConnexion(Connection c) {
        try {
            c.close();
            System.out.println("Connexion terminee");
        }
        catch(SQLException e){
            System.out.println("Impossible de fermer la connexion...Tant pis");
            return;
        }
    }

Les interactions simples

De l'utilisation des méthodes createStatement() et getResultSet().


    public static void traiterRequete(Connection c,
                                      String requete) {
        try {
            Statement s = c.createStatement();
            if (s.execute(requete)) {
                ResultSet res = s.getResultSet();
                TablesBD.sortieResultSet(res);
            }
            else {
                int res = s.getUpdateCount();
                System.out.println("Modification reussie de "+res+" lignes.");
            }
        }
        catch(SQLException e){
            System.out.println("Impossible de traiter la requete");
            return;
        }
    }


next up previous
suivant: Optimiser l'accès aux BD monter: Les accès aux bases précédent: Applications OO et SGBD
Alain GRIFFAULT
2000-10-30