JDBC (Java DataBase Connectivity ) est un ensemble de classes servant à manipuler les bases de données. Avec JDBC, Java est capable de communiquer avec des bases de variées. Il faut entendre par base de données aussi bien les très grosses bases de données industrielles (tels que Oracle , Informix , Sybase , etc.) que les des bases de données plus modestes tels que FoxPro , MS Access , mSQL . Il permet de manipuler également les fichiers textes ou les feuilles de calculs Excel .
Avec JDBC , Java communique avec potentiellement toutes les bases de données; autrement dit, une même application peut interagir avec un fichier texte, une feuille de calcul Excel , une base de données Access , Oracle , Informix , Sybase , etc. Il n'est pas nécessaire d'écrire une application par type de base de données.
L'interaction avec une base de données se déroulent principalement en ces quatre phases successives:
A chacune de ces phases, correspond une classe Java que l'on trouvera dans le package java.sql:
JDBC fournit un moyen de communication de bas niveau avec les bases de données: Java se contente d'envoyer des commandes SQL à la base de données.

Interface JDBC
Microsoft propose une API permettant d'accéder à diverses bases de données. Cette API , appelé ODBC (Open DataBase Connectivity ) est très certainement l'API la plus répandue dans le monde.
Pourquoi avoir alors créé une API particulière pour Java ? ODBC est orienté langage C et cela obligerait à écrire des méthodes natives en Java ce que l'on veut absolument éviter pour des raisons de portabilité, sécurité, etc. De plus, ODBC est relativement complexe et JDBC se veut bien plus simple.
Au lieu de réinventer la roue, JDBC est bâti au dessus de ODBC
et
permet une programmation relativement simple des applications
orientées bases de données.
A TERMINER
A TERMINER
Une connexion est constituée des commandes SQL qui sont exécutées et des résultats qui sont retournés. Une même application peut établir plusieurs connexions avec une même base de données et/ou avoir des connexions avec plusieurs bases de données.
La manière standard d'établir une connexion consiste à invoquer la méthode DriverManager.getConnection. Cette méthode retourne, lorsque la connexion a pu s'établir avec la base de données, un objet de type Connection.
Voic à titre d'exemple, un bout de code classique qui établit une connexion vers une base de données désigné par jdbc:odbc:Test avec pour nom d'utilisateur "CoursJava" et pour mot de passe "j!a-v a"
String url = "jdbc:odbc:Test"; Connection con = DriverManager.getConnection(url, "CoursJava", "\j!a-v~a");
A TERMINER
Une base de données est donc désignée par une URL . Rappelons qu'on appelle URL (Uniform Resource Location ) la manière de nommer une ressource sur le réseau Internet . Par exemple, http://gbm.esil.univ-mrs.fr/eleves/index.html désigne la page WEB d'accueil des élèves du département GBM de l'ESIL . Un URL se compose de trois parties: le protocole, l'hôte et le document. La syntaxe générale d'un URL est :
<protocole>://<nom_hote>[:<port>]/<chemin>/<nom_fichier>#<section>
La syntaxe des URL s JDBC suivent le même schéma pour identifier une base de données et le pilote approprié pour établir une connexion avec la base:
jdbc:<sous protocol>:<nom>
La première partie est le protocole utilisé: avec Java ce protocole est toujours jdbc.
Le sous protocole est le nom du pilote ou le nom de la connectivité pour la base choisie. Dans ce qui va suivre, nous utiliserons le pilote odbc.
A TERMINER
Le nom est le moyen d'identifier la base proprement dite. Selon le pilote utilisé, ce nom pourra être subdivisé en plusieurs parties.
Par exemple, si l'on dispose du sous protocole générique dbnet, l'URL
jdbc:dbnet:\\//gbm:500/eleves
Le sous protocole odbc admet des noms de base suivant la syntaxe:
jdbc:odbc:<data-source-name>[;<attribute-name>=<attribute-value>]*
Voici des exemples d'URL JDBC:
jdbc:odbc:qeor7 jdbc:odbc:wombat jdbc:odbc:wombat;CacheSize=20;ExtensionCase=LOWER jdbc:odbc:qeora;UID=kgh;PWD=fooey
Une fois la connexion établie, pour pouvoir envoyer des requêtes SQL, il faut obtenir une instance de Statement sur laquelle on invoque une des méthodes executeQuery, executeUpdate, etc.
Statement stmt = con.createStatement(); ResultSet resultat = stmt.executeQuery("SELECT Nom, Age FROM Etudiant;");
Les résultats sont retournés dans une instance de la classe ResultSet. Ce résultat est constitué d'une suite de ligne, le passage d'une ligne à la suivante se fait par la méthode next de la la classe ResultSet. En outre, cette classe fournit un ensemble de méthodes getXX pour extraire les champs.
while (resultat.next()) { String nom = result.getString("Nom"); int age = result.getInt("Age"); System.out.println("Nom: " + nom + " Age: ", age); }
import java.sql.*; public class CreerUneBD { public static void main (String args[]) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (Exception e) { System.out.println("Erreur de chargement du pilote JDBC/ODBD."); return; } Statement stmt = null; Connection con=null; try { con = DriverManager.getConnection ("jdbc:odbc:"+args[0], "", ""); stmt = con.createStatement(); } catch (Exception e) { System.err.println("Erreur de connexion à jdbc:odbc:ElevesJdbc"); } try { stmt.execute("create table toto (Nom varchar (10), Sexe varchar (1), ExamMars integer, ExamJuin integer;"); stmt.execute("insert into toto values ('Jean', 'M', 10, 12);"); stmt.execute("insert into toto values ('Pierre', 'M', 10, 10);"); stmt.execute("insert into toto values ('Julie', 'F', 16, 12);"); stmt.execute("insert into toto values ('Paul', 'M', 16, 14);"); stmt.execute("insert into toto values ('Nathalie', 'F', 12, 12);"); stmt.execute("insert into toto values ('Jacques', 'M', 8, 6);"); stmt.execute("insert into toto values ('Renée', 'F', 8, 8);"); stmt.execute("insert into toto values ('Jean', 'M', 5, 0);"); stmt.execute("insert into toto values ('Nicole', 'F', 9, 18);"); stmt.execute("insert into toto values ('Claude', 'M', 11, 13);"); stmt.execute("insert into toto values ('Marie', 'F', 12, 6);"); stmt.execute("insert into toto values ('Dominique', 'M', 14, 14);"); stmt.execute("insert into toto values ('Sylvie', 'F', 6, 7);"); con.close(); } catch (Exception e) { e.printStackTrace(); } } }
import java.sql.*; public class ConsulterUneBD { public static void main (String args[]) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (Exception e) { System.out.println("Erreur de chargement du pilote JDBC/ODBD."); return; } Statement stmt = null; Connection con=null; try { con = DriverManager.getConnection ("jdbc:odbc:"+args[0], "", ""); stmt = con.createStatement(); } catch (Exception e) { System.err.println("Erreur de connexion à jdbc:odbc:ElevesJdbc"); } try { ResultSet result = stmt.executeQuery("SELECT Nom, ExamJuin, ExamMars FROM toto ;"); while (result.next()) { String name = result.getString("Nom"); double m = result.getInt("ExamMars"); double j = result.getInt("ExamJuin"); System.out.println("La moyenne de "+name+" est : " + ((m+j)/2)); } con.close(); } catch (Exception e) { e.printStackTrace(); } } }