Master 1 SIGLIS Intégration des données dans l’entreprise Stéphane Tallard JDBC: Java Database Connectivity Master 1 SIGLIS1JDBC
2 Master 1 SIGLIS JDBC : qu’est ce que c’est ? JDBC: Java Database Connectivity JDBC est une brique de base de l’environnement Java Quand on télécharge Java on télécharge JDBC JDBC fournit le moyen de se connecter à n’importe quelle source de données depuis Java (à condition qu’un driver JDBC ait été fourni)
JDBC 3 Master 1 SIGLIS ODBC / architecture n-tiers JDBC
4 Master 1 SIGLIS JDBC : Qu’est ce que c’est ? (2) JDBC est une spécification Oracle : summary.html summary.html La spécification contient la description d’un ensemble de classes avec leurs méthodes et leur comportement
JDBC 5 Master 1 SIGLIS JDBC JDBC est une API qui définit des ordres standards Les constructeurs de base de données fournissent des drivers qui implémentent ces ordres standards. L'architecture est non propriétaire : elle est adoptée par presque tous les constructeurs du marché Si on change de base de données: seules les requêtes SQL doivent être vérifiées si on change de base de données, il suffit de changer le driver de la base de données Ne nécessite aucune configuration particulière
JDBC 6 Master 1 SIGLIS Que fait un driver JDBC (1) ? L'application Java s'adresse au driver jdbc en utilisant l'API JDBC Le driver traduit les ordres JDBC en ordres compréhensibles par le SGBD Le driver jdbc est une bibliothèque Java (jar) Application JAVA API JDBC Driver JDBC SGBD
JDBC 7 Master 1 SIGLIS Dans le cas d’une requête SQL, le driver s’occupe : de transporter la requête SQL au SGBD de la faire exécuter de transporter le résultat de la requête Que fait un driver JDBC (2) ? Application JAVA API JDBC Driver JDBC SGBD
JDBC 8 Master 1 SIGLIS L’API JDBC API: Application Programming Interface Interface de Programmation d’application Un ensemble de classes avec leurs méthodes et la description de leur comportement Connection Statement ResultSet SGBD Connexion Envoyer des ordres au SGBD: Requêtes SQL, Procédures stockées Naviguer dans le résultat d'une requête Modifier / créer des données
JDBC 9 Master 1 SIGLIS Connexion au SGBD La connexion au SGBD est le préalable indispensable Chargement du pilote JDBC Class.forName("nom.de.la.classe"); Connection connexion = DriverManager.getConnection(jdbc:odbc:base_de_donnees); Chargement dynamique de la classe principale du driver: « Nom.de.la.classe » est fourni par le constructeur du driver le driver est un jar qui doit être trouvé sur le classpath le nom de cette classe est défini par le constructeur du driver Dépend de la configuration système et du SGBD utilisé NB: classpath Défini dans les arguments au moment où on lance un programme Java Le classpath contient une liste de répertoire ou Java doit chercher les classes que l’on instancie
JDBC 10 Master 1 SIGLIS Exemple: avec le SGBD mySQL try { Class.forName ( "org.gjt.mm.mysql.Driver" ); // dépend du driver MySql utilisé System.out.println ( "MySQL Driver Found" ); } catch ( java.lang.ClassNotFoundException e ) { System.out.println("MySQL JDBC Driver not found... "); throw ( e ); } String host = “??????” ; // Dépend de votre configuration String database = “??????” ; // dépend de votre base String url = ""; try { url = "jdbc:mysql://" + host + "/" + database; Connection con = DriverManager.getConnection(url); System.out.println("Connection established to " + url + "..."); } catch ( java.sql.SQLException e ) { System.out.println("Connection couldn't be established to " + url); throw ( e ); }
JDBC 11 Master 1 SIGLIS L’interface Connection L'objet Connection représente une session avec un SGBD Principales méthodes : // Fermer la connexion public void close() throws SQLException // renvoie vraie si la connexion est fermée public boolean isClosed() throws SQLException // Commit public void commit() throws SQLException // Rollback public void rollback() throws SQLException // préparer une requête Public Statement createStatement()
JDBC 12 Master 1 SIGLIS Interface Statement Permet d’envoyer des requêtes SQL Principales méthodes // Exécute la requête SQL et renvoie vrai si la requête a été exécutée // avec succès public boolean executeQuery(String sql) throws SQLException ; // Renvoie les résultats de la requête précédente (si il y en a) public ResultSet getResultSet() throws SQLException ; // Execute un ordre SQL qui ne renvoie rien (INSERT, DELETE,UPDATE) public int executeUpdate(String sql) throws SQLException
JDBC 13 Master 1 SIGLIS Interface ResultSet L'interface Resultset permet de naviguer sur le résultat d'une requête SQL public void update (int columnIndex, value)throws SQLException ; Public void update (String colummName, value)throws SQLException ; public void updateRow() throws SQLException; public void deleteRow() throws SQLException public get (int columnIndex)throws SQLException ; public get (String colummName)throws SQLException ; Lecture du résultat d’une requête SELECT public boolean first()throws SQLException ; public boolean last()throws SQLException ; public boolean absolute(int row) throws SQLException ; public boolean previous()throws SQLException ; public boolean isLast() throws SQLException; public boolean next() throws SQLException ; Navigation dans le résultat d’une requête SELECT Modification/Insertion/Destruction
JDBC 14 Master 1 SIGLIS Un programme JDBC de lecture lançant une requête SQL SELECT Etape 1: Connexion On obtient un objet de la classe Connexion Etape 2: Envoyer une requête SQL A partir de l’objet Connexion, obtenir un objet Statement en utilisant la méthode createStatement sur l’objet Statement, lancer une requête SQL en utilisant la méthode executeQuery Etape 3: Lire les résultats sur l’objet Statement, obtenir le résultat de la requête on obtient un objet ResultSet Naviguer sur l’objet ResultSet en utilisant les méthodes first, last, previous, absolute, isLast, next Lire les données en utilisant get( numéro de colonne) ou get (« nom de colonne »)
JDBC 15 Master 1 SIGLIS Exercice Que fait le programme CreateCoffees.java ? Que fait le programme SQLStatement.java Que fait le programme InsertRows.java ? Reprendre le slide précédent pour décrire un programme JDBC qui fait une modification dans une table Donner deux options possibles.
JDBC 16 Master 1 SIGLIS Correspondance entre SQL et les types Java
JDBC 17 Master 1 SIGLIS Exercice Modifier l’implémentation de ArticleMetier : Les méthodes travaillent en base de données et non plus en mémoire.