Université Mentouri Constantine Département Informatique Option: STIC Master2 JDBC Présenter par: Mouctar Souleymane Bah Enseignent: Dr Amer Draâ Le 05/11/2012
Sommaire I. Introduction II. Définition III. Architecture logiciel IV. Types de pilotes V. Structure d’un programme JDBC VI. Classes de l’API JDBC VII. Connexion à une base de données VIII. L’accès à la base de données IX. Un exemple de code complet X. Conclusion
I. Introduction Incontournable dans le monde de l’informatique, les bases de données sont le moteur de toute application ayant à traiter et sauvegarder beaucoup d’information. Java se devait d’implémenter une interface digne de ce nom et c’est chose faite depuis l’été 1996 avec le kit JDBC. Depuis, le travail acheminé de Sun a permis l’intégration complète des bases de données dans les kits fournis par l’éditeur. Architecturé autour du langage SQL, JDBC possède des atouts qui font de Java, un langage idéal pour la connectivité aux BD.
II. Définition JDBC (Java DataBase Connectivity)est une API Java (ensemble de classes et d'interfaces défini par SUN et les acteurs du domaine des BD) permettant d'accéder aux bases de données à l'aide du langage Java via des requêtes SQL. Cette API permet d'atteindre de manière quasi-transparente des BDs : Sybase, Oracle, MySQL, ... avec le même programme Java JDBC.
III Architecture logiciel
IV. Types de pilotes Les pilotes de classe 1 et 2 sont dits natifs car ils utilisent une partie écrite dans du code spécifique non Java (souvent en langage C). Ces pilotes sont rapides mais doivent être présent sur le poste client car se sont des librairies dynamiques. Les pilotes de classe 3 et 4 sont dits 100% Java car ils interrogent le gestionnaire de base de données avec du code uniquement écrits en Java. Ces pilotes peuvent alors être utilisés par des applets dans des browsers classiques.
V. Structure d'un programme JDBC Recherche et chargement du driver approprié à la BD. Syntaxe : Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Etablissement de la connexion à la base de données. Syntaxe : Connection conX = DriverManager.getConnection (...); Construction de la requête SQL Syntaxe : Statement stmt = conX.createStatement(); Envoi de cette requête et récupération des réponses Syntaxe: ResultSet rs = stmt.executeQuery("SELECT a, b, c ... FROM ... WHERE ..."); Parcours des réponses. Syntaxe : while (rs.next()) { Traitement } fermeture de la connexion. Syntaxe : conX.close () ;
VI. Classes de l’API JDBC Toutes les classes de JDBC sont dans le package java.sql. Il faut donc l'importer dans tous les programmes devant utiliser JDBC. Exemple : import java.sql.* ;
VII. Connexion à une base de données Chargement du pilote : Il faut tout d'abord charger le pilote JDBC qui fait le lien entre la BD et l’application et peut être chargée en appelant la méthode de classe forName de la classe java.lang.class. Exemple : Chargement du pilote Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver"); L'établissement de la connexion: Pour se connecter à une base de données, il faut instancier un objet de la classe Connection en lui précisant sous forme d'URL la base à accéder. La syntaxe URL peut varier d'un type de base de données à l'autre mais elle est toujours de la forme : protocole:sous_protocole:nom. Exemple : Connection con = DriverManager.getConnection(url, "myLogin", "myPassword");
VIII. L'accès à la base de données L'exécution de requêtes SQL : Les requêtes d'interrogation SQL sont exécutées avec les méthodes d'un objet Statement que l'on obtient à partir d'un objet Connection. Un objet de la classe Statement permet d'envoyer des requêtes SQL à la base. La création d'un objet Statement s'effectue à partir d'une instance de la classe Connection : Exemple : Statement stmt = con.createStatement(); Pour une requête de type interrogation (SELECT), la méthode à utiliser de la classe Statement est executeQuery(). Pour des traitements de mise à jour et de type DDL (Data Definition Langage : définition de données) il faut utiliser la méthode executeUpdate(). Exemple: ResultSet rs = stmt.executeQuery("SELECT * FROM LivrePapier");
VIII. L'accès à la base de données Classe ResultSet: C'est une classe qui représente une abstraction d'une table qui se compose de plusieurs enregistrements constitués de colonnes qui contiennent les données. Les principales méthodes pour obtenir des données sont :
IX. Un exemple de code complet import java.sql.*; public class Exemple_JDBC { public static void main(String[] args) throws SQLException { Connection con; Statement stm; ResultSet resultat; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con=DriverManager.getConnection("jdbc:odbc:livre"); System.out.println("Connexion établie"); stm=con.createStatement(); stm.executeUpdate("CREATE TABLE LivrePapier(nom STRING" + ", isbn INT,auteur STRING, annee INT,editeur STRING)"); stm.executeUpdate("insert into LivrePapier(nom,isbn,auteur,annee,editeur)values('PHP & mysql','42486','Djongassy','2001','Edition bleu')"); stm.executeUpdate( "insert into LivrePapier(nom,isbn,auteur,annee,editeur)values('Synthèse dimage','486','Souleymane','2000','Edition bleu')"); stm.executeUpdate( "insert into LivrePapier(nom,isbn,auteur,annee,editeur)values('Sytème complexe','19786','Monsieur Elvis','2008','Edition bleu')"); stm.executeUpdate( "insert into LivrePapier(nom,isbn,auteur,annee,editeur)values('Montage video','2486','Monsieur Simbabawe','2010','Edition bleu')"); Charge le driver Etablit la connexion Création de l’objet Statement Création table Insertion des données
L’utilisation de Resultset //Récupère les données resultat=stm.executeQuery("select * from LivrePapier"); ResultSetMetaData rsmd = resultat.getMetaData(); //Affichage des données for ( int i = 1; i <= rsmd.getColumnCount(); i++ ) System.out.print( "\t" + rsmd.getColumnName(i).toUpperCase() + "\t *"); System.out.println("\n******************************************************************************************************"); while(resultat.next()) { System.out.print( "\t" + resultat.getObject(i).toString() + "\t|"); System.out.println("\n---------------------------------------------------------------------------------------------------"); } //stm.executeUpdate("DROP TABLE LivrePapier"); resultat.close(); stm.close(); con.close(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); L’utilisation de Resultset Affichage des données Suppression de la table Fermeture de la connexion
X. Conclusion Les programmes développés en Java avec JDBC sont entièrement portables et peuvent fonctionner sur n’importe quel ordinateur disposant de l’environnement Java. Quelle que soit le type de BD, les programmes écrits avec JDBC fonctionneront, quasiment sans modification du code. Un programme écrit pour accéder aux données sur un serveur SQL Server de Microsoft fonctionnera également sur base Oracle. JDBC propose plusieurs niveaux de drivers JDBC permettant d’offrir une compatibilité maximum avec des applications existantes tout en acceptant la présence de code non java. C’est le cas de l’interface ODBC
Bibliographie www.jmdoudoux.fr/java/dej/chap-jdbc.htm http://cuiwww.unige.ch/~bonjour http://java.sun.com/docs/books/tutorial/jdbc/ http://java.sun.com/products/jdk/1.3/docs/guide/jdbc/index.html http://java.sun.com/products/jdk/1.3/docs/guide/jdbc/getstart/GettingStartedTOC.fm.html les Cahiers du programmeur Java1.4 et 5.0 3e édition Emmanuel PUYBARET édition EYROLLES
Merci de votre attention