suivant: Optimiser l'accès aux BD
monter: Les accès aux bases
précédent: Applications OO et SGBD
Sous-sections
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.
- 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.
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;
}
}
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;
}
}
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