JDBC PDF
Document Details
Uploaded by Deleted User
Tags
Summary
This document provides an overview of JDBC, a Java API for connecting to and interacting with databases. It covers topics such as database connectivity, drivers, and basic SQL queries. The information is suitable for developers interested in database programming in Java.
Full Transcript
JDBC JDBC : Introduction JDBC (Java DataBase Connectivity) est une marque déposée de Sun/Oracle désigne une API (Interface de programmation d’application) Elle permet de se connecter à une base de données et d'interagir avec notamment en exécutant des requêtes SQL. L'architecture de JDBC permet d'...
JDBC JDBC : Introduction JDBC (Java DataBase Connectivity) est une marque déposée de Sun/Oracle désigne une API (Interface de programmation d’application) Elle permet de se connecter à une base de données et d'interagir avec notamment en exécutant des requêtes SQL. L'architecture de JDBC permet d'utiliser la même API pour accéder aux différentes bases de données pilotes (drivers) qui fournissent une implémentation spécifique à la base de données à utiliser. JDBC fait partie du JDK (Java Development Kit) JDBC: Les outils nécessaires Toutes les classes et interfaces sont dans le package java.sql : import java.sql.* et sont incluses dans le JDK à partir de sa version 1.1. Pour pouvoir utiliser JDBC, il faut un pilote qui est spécifique à la base de données à laquelle on veut accéder. ⇒ Indépendance de JDBC vis à vis des bases de données. Les drivers se présentent souvent sous forme de fichiers jar dont le chemin doit être ajouté au classpath pour permettre à la JVM de pouvoir en charger les classes à utiliser. Les classes et interfaces de base de JDBC package java.sql. Les 4 types de base de JDBC sont : DriverManager (Rôle: Charger et configurer le driver de la base de données) Connection (Rôle: Réaliser la connexion et l'authentification à la base de données) Statement (Rôle: Encapsuler la requête SQL et la transmettre pour exécution à la base de données) ResultSet (Rôle: Parcourir les informations retournées par la base de données dans le cas d'une sélection de données) chacune correspondant à une étape de l'accès aux données. JBDC: Etapes Chacune de ces classes dépend de l'instanciation d'un objet de la précédente classe l'utilisation de JDBC requière plusieurs étapes pour interagir avec une base de données : Obtenir une instance de Connection qui se connecte à la base de données Obtenir une instance de Statement à partir de la connexion Configurer et exécuter une requête SQL via le Statement Exploiter les résultats retournés par la base de données Fermer les différentes instances utilisées JDBC: Connexion à une BD (1) La connexion à une base de données requiert au préalable chargement du pilote JDBC qui sera utilisé pour communiquer avec la base de données. Il faut ajouter au classpath le fichier jar du pilote JDBC pour la base de données à utiliser, pour que l classe d'implémentation de l'interface java.sql.Driver puisse être trouvée et chargée. Avant Java 6, la classe d'implémentation du pilote doit être chargée explicitement avant toute utilisation. A partir de Java 6, si le pilote est compatible avec JDBC 4.0, alors la classe d'implémentation du pilote sera trouvée et chargée automatiquement. Créer une instance de type Connection qui va encapsuler la connexion à la base de données. JDBC: Connexion à une BD (2) 1) Chargement du pilote Avant Java 6: il faut charger explicitement la classe d'implémentation du pilote. Une des méthodes: utiliser la méthode static forName() de la classe Class en lui passant en paramètre le nom pleinement qualifié de la classe La classe à charger est spécifique à chaque fournisseur. Par exemple, si le nom de la classe est jdbc.DriverXXX, le chargement du driver se fera avec le code suivant : Class.forName("jdbc.DriverXXX"); JDBC: Connexion à une BD (3) Exemple de classes d'implémentation de pilotes pour différentes bases de données: MySQL: com.mysql.jdbc.Driver Oracle: oracle.jdbc.driver.OracleDriver PostgreSQL: org.postgresql.Driver Exemple: Chargement du pilote pour une base MySql Class.forName(" com.mysql.jdbc.Driver "); JDBC: Connexion à une BD (4) La méthode static forName() de la classe Class peut lever une exception de type java.lang.ClassNotFoundException si le nom de la classe fournie en paramètre ne peut pas être trouvée dans le classpath. JDBC: Connexion à une BD (5) 2) Etablir la connexion: une fois que le driver est chargé, il faudra demander une connexion. Cette connexion est obtenue grâce à la méthode getConnection de la classe DriverManager Cette méthode retourne la connexion qui est en fait, un objet d’une classe implémentant l’interface «Connection». Connection con=DriverManager.getConnection(url); JDBC: Connexion à une BD (6) Remarque : Nous ne pouvons pas créer un objet pour une interface. Mais il est possible d'attribuer un objet d’une classe qui implémente cette interface à la variable de référence de cette interface. Ici, con est une variable de référence à cette interface, et DriverManager.getConnection() renvoie un objet de classe qui implémente l'interface Connection. JDBC: Connexion à une BD (7) La syntaxe de l'URL peut varier d'un type de base de données à l'autre mais elle est généralement de la forme : jdbc:: subprotocol correspond au sous-protocole qui définit le type de mécanisme de connectivité à la base de données qui peut être pris en charge par un ou plusieurs pilotes le contenu et la syntaxe du subname dépendent du sous-protocole JDBC: Connexion à une BD (8) Exemple: String urlDB = "jdbc:mysql://localhost:3306/appdb"; con = DriverManager.getConnection(urlDB) Une seconde surcharge de la méthode getConnection() attend en paramètres en plus de l'url, l'utilisateur et le mot de passe à utiliser pour se connecter à la base de données. Connection con = DriverManager.getConnection(url, "admin", "motdepasse"); Exemple: Connection con=DriverManager.getConnection("jdbc:postgresql://localhost/test“ ,"adm“ ,"12345"); Toute connexion ouverte doit être fermée. La méthode Close de l’objet Connection permet de fermer une connexion. JDBC: Accès à la base de données 1) Creation de l’objet Statement: Les requêtes SQL sont exécutées avec les méthodes d'un objet de type Statement que l'on obtient à partir d'un objet Connection. Une instance de type Statement est utilisée pour exécuter une requête SQL statique et renvoyer les résultats qu'elle produit. Une instance de l'interface Statement permet de soumettre des requêtes SQL, sans support de paramètres d'entrée, à la base de données. Pour obtenir une instance de type Statement, il faut invoquer la méthode createStatement() sur un objet de type Connection : Statement stmt = con.createStatement(); JDBC: Accès à la base de données Il est possible de créer plusieurs instances de type Statement à partir d'une même instance de de type Connection. L'invocation de la méthode close() d'une instance de type Statement permet d'indiquer que son exploitation est terminée. JDBC: Accès à la base de données 2) Exécution de la requête La méthode à utiliser pour soumettre la requête à la base de données dépend du type de la requête soumise : Pour une requête de type interrogation (SELECT), il faut utiliser la méthode executeQuery() de l'interface Statement Pour une requête de mise à jour, il faut utiliser la méthode executeUpdate() Lors de l'appel à la méthode d'exécution, il est nécessaire de lui fournir en paramètre la requête SQL sous forme de chaîne de caractères. JDBC: Accès à la base de données Par défaut, un seul objet ResultSet par objet Statement peut être ouvert en même temps. Plusieurs Resultset => plusieurs Statement JDBC: Accès à la base de données Exemple: ResultSet rs = stmt.executeQuery("SELECT * FROM employe"); La méthode executeUpdate() retourne le nombre d'enregistrements qui ont été mis à jour JDBC: Exploitation des résultats La classe ResultSet représente une abstraction des résultats de l'exécution d'une requête SQL 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 : getInt(int/string) : Retourner sous forme d'entier le contenu de la colonne dont le numéro/ le nom est passé en paramètre getFloat(int/string) : Retourner sous forme d'un nombre flottant le contenu de la colonne dont le numéro / le nom est passé en paramètre getDate(int/string) : Retourner sous forme de date le contenu de la colonne dont le numéro / le nom est passé en paramètre next() : Se déplacer sur le prochain enregistrement : retourne false si la fin est atteinte close() : Fermer le ResultSet getMetaData() : Retourner un objet de type ResultSetMetaData associé au ResultSet JDBC: Exploitation des résultats La méthode getMetaData() retourne un objet de la classe ResultSetMetaData qui permet d'obtenir des informations sur le résultat de la requête. Ainsi, le nombre de colonnes peut être obtenu grâce à la méthode getColumnCount() de cet objet. JDBC: Exploitation des résultats La méthode next() déplace le curseur sur le prochain enregistrement. Le curseur pointe initialement juste avant le premier enregistrement : il est donc nécessaire de faire un premier appel à la méthode next() pour se placer sur le premier enregistrement. Des appels successifs à la méthode next() permettent de parcourir l'ensemble des enregistrements. Elle retourne false lorsqu'il n'y a plus d'enregistrement. JDBC: Exploitation des résultats (Exemple) Exemple avec variantes (variante 1) Exemple avec variantes (variante 3) Exemple avec variantes (variante 4) Exemple avec variantes (variante 5) Obtention des informations sur la BD JDBC propose plusieurs interfaces pour permettre d'obtenir dynamiquement des informations concernant les métadonnées sur la base de données ou sur un ResultSet. Les objets qui peuvent être utilisés pour obtenir des informations sur la base de données sont : DatabaseMetaData : Informations à propos de la base de données : nom des tables, index, version,… ResultSetMetaData: Informations sur les colonnes (nom et type) d'un ResultSet