Accès aux bases de données en Java avec JDBC PDF
Document Details

Uploaded by LawfulThermodynamics
Université des Sciences et de la Technologie Houari Boumediène
Tags
Summary
Ce document présente les concepts de base de l'accès aux bases de données en utilisant la technologie JDBC en Java. Il introduit les étapes clés, des exemples d'utilisation et la structure d'un programme Java typique pour la manipulation des bases de données.
Full Transcript
# Chapitre 6 ## Accès aux bases de données en Java avec JDBC ### Contents - 6.1 Introduction - 6.2 L'accès aux bases de données avec JDBC - 6.3 Exemple d'utilisation - 6.4 Exemple d'application - 6.4.1 Exemple avec le SGBD MySQL - 6.4.2 Exemple Avec ODBC MS Access - 6.4.3 L'exécution -...
# Chapitre 6 ## Accès aux bases de données en Java avec JDBC ### Contents - 6.1 Introduction - 6.2 L'accès aux bases de données avec JDBC - 6.3 Exemple d'utilisation - 6.4 Exemple d'application - 6.4.1 Exemple avec le SGBD MySQL - 6.4.2 Exemple Avec ODBC MS Access - 6.4.3 L'exécution - 6.5 Conclusion ## 6.1 Introduction JDBC (Java DataBase Connectivity) est une API Java permettant de se connecter à des bases de données. JDBC constitue un ensemble de classes permettant de développer des applications capables de se connecter à des serveurs de bases de données. L'API JDBC a été développée de telle façon à permettre à un programme de se connecter à n'importe quelle base de données en utilisant la même syntaxe, c'est-à-dire que l'API JDBC est indépendante du SGBD. De plus, JDBC bénéficie des avantages de Java, dont la portabilité du code, ce qui lui vaut en plus d'être indépendant de la base de données et d'être indépendant de la plate-forme sur laquelle elle s'exécute [6] [25]. L'API JDBC permet aux programmes: 1. L'établissement d'une connexion avec le SGBD. 2. L'envoi de requêtes SQL au SGBD (à partir du programme java). 3. Le traitement, au niveau du programme, des données retournées par le SGBD. 4. Le traitement des méta-données de la connexion, de l'instruction ou des résultats. 5. Le traitement des erreurs retournées par le SGBD lors de l'exécution d'une instruction. ## 6.2 L'accès aux bases de données avec JDBC Dans un système client/serveur, l'accès aux bases de données avec JDBC peut s'effectuer selon un modèle à deux couches ou bien un modèle à trois couches. Pour le modèle à deux couches, une application Java est intimement liée avec une base de données. A cet effet, il faut bien évidemment disposer, pour la base de données concernée, d'un pilote JDBC adéquat. Les instructions SQL sont directement envoyées à la base, cette dernière renvoyant les résultats par un biais tout aussi direct [6] [25]. La base de données peut être exécutée sur la machine locale (celle sur laquelle l'application Java fonctionne) ou bien sur tout autre ordinateur du réseau (Intranet ou Internet) (Figure 6.1). **FIGURE 6.1: Accès aux bases de données avec JDBC selon un modèle à deux couches.** Dans le modèle à 3 couches (Figure 6.2), une troisième couche (le serveur d'applications) vient s'intercaler entre l'application Java et la base de données. Les instructions SQL et les résultats livrés en retour y transitent. Ce modèle présente l'avantage d'intégrer dans cette couche un contrôle d'accès. **FIGURE 6.2: Accès aux bases de données avec JDBC selon un modèle à trois couches.** ## 6.3 Exemple d'utilisation Les étapes généralement rencontrées dans un programme utilisant cette technologie sont: 1. Chargement du driver correspondant au SGBD utilisé. 2. Ouverture d'une connexion vers la base de données. 3. Création d'une requête. 4. Envoi d'une requête. 5. Exécution de la requête par le SGBD. 6. Envoi des résultats de la requête par le SGBD vers le programme. 7. Accès aux résultats de la requête. 8. Gestions des erreurs (exceptions). 9. Libération des ressources (fermeture de la connexion, etc.). ## Structure de programme La Structure générale d'un programme Java utilisant l'API JDBC est donnée par: ```java import java.sql.DriverManager; //gestion des pilotes import java.sql.Connection; //une connexion a la BD import java.sql.Statement; //une instruction import java.sql. ResultSet; //un resultat (lignes et colonnes) import java.sql.SQLException; // Erreur et Exception public class Exemple { // Declaration et Chargement du pilote // Connexion a la base des donnees // Creation des requetes // Exploitation des resultats // Deconnexion // Programme principal } ``` Le paquetage java.sql regroupe les interfaces et les classes de l'API JDBC. ## Déclaration et chargement du pilote JDBC Pour charger un driver, on peut utiliser la méthode Class.forName(String). L'appel à forName() déclenche un chargement dynamique du pilote. Un programme peut utiliser plusieurs pilotes, un pour chaque base de données. ```java void loadDriver() throws ClassNotFoundException { Class.forName("com.mysql.jdbc.Driver"); } ``` ## Connexion à la base de données Pour établir une connexion à une base de données, il faut connaître son nom, le nom et le mot de passe de l'utilisateur. On utilise la méthode getConnection() de la classe DriverManager avec l'URL en argument. ```java final String url = "jdbc:mysql://localhost/dbessai"; Connection conn = DriverManager.getConnection(url); // ou bien Connection conn = DriverManager.getConnection(url, "bduser", "bdpsw"); ``` L'URL est de la forme jdbc:sous-protocole:sous-nom. Le sous-protocole représente le driver (oracle:thin, mysql, ....). Le sous-nom identifie la base de données. Voici quelques exemples: 1. jdbc:oracle://10.1.25.41:1234/dbtest 2. jdbc:mysql://localhost/dbessai ## Création des requêtes Il faut tout d'abord commencer par la création du statement. ```java public void listPersons() throws SQLException { Connection conn = null; try { // create a connection conn = DriverManager.getConnection (url, "bduser", "root"); // creation de la connection. // create a statement Statement st = conn.createStatement(); } } ``` Ensuite il faut déclarer le code SQL de la requête. ```java String query = "SELECT nom, prenom, age FROM personne ORDER BY age"; ResultSet rs = st.executeQuery (query); ``` Pour l'accès en mise à jour, en outre de l'exécution d'un select avec executeQuery(), on peut aussi exécuter un update, un insert ou un delete. Dans ce cas, il faut utiliser la méthode executeUpdate. ## Exploitation des résultats On peut parcourir les lignes de l'objet ResultSet avec la méthode next(). Cette méthode renvoie VRAI s'il reste des lignes à lire et FAUX sinon. ```java while (rs.next()) { System.out.println( rs.getString (1) + rs.getString("prenom") + rs.getInt(3)); } ``` ## Déconnexion A la fin, il faut libérer les objets ResultSet et Statement. Il faut également fermer la connexion par l'utilisation de la méthode close(). ```java finally { // close result, statement and connection rs.close(); st.close(); conn.close(); } ``` ## Mise en œuvre et gestion des erreurs ```java public static void main(String [] Args) { Exemple test = new Exemple(); try { test.loadDriver(); test.listPersons(); } catch (ClassNotFoundException e) { System.err.println("Pilote JDBC introuvable!"); } catch (SQLException e) { System.out.println("SQLException:" + e.getMessage()); e.printStackTrace(); } } ``` ## 6.4 Exemple d'application ### 6.4.1 Exemple avec le SGBD MySQL #### Création de la base des données ```sql mysql> create database master2; Query OK, 1 row affected (0.00 sec) mysql> use master2; Database changed mysql> create table etudiant (mat int(4), nom varchar(15), prenom varchar(15)); Query OK, 0 rows affected (0.20 sec) mysql> insert into etudiant values (1, 'Mohamed', 'Chaib'); Query OK, 1 row affected (0.09 sec) mysql> insert into etudiant values (1, 'karim', 'Benhassen'); Query OK, 1 row affected (0.07 sec) mysql> commit; Query OK, 0 rows affected (0.00 sec) ``` #### Le programme Java ```java import java.sql.*; public class MysqlConnect { static Connection conn = null; static String url = "jdbc:mysql://localhost:3306/"; static String dbName = "master2"; static String driver = "com.mysql.jdbc.Driver"; static String userName = "root"; static String password = "root"; public static void main(String[] args) { System.out.println("MySQL Connect Example."); try { Class.forName(driver).newInstance(); conn = DriverManager.getConnection(url+dbName, userName, password); System.out.println("Connected_to_the_database"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("Select * from etudiant;"); while (rs.next()) {System.out.println(rs.getString(1)+" "+rs.getString (2)+" "+rs.getString(3));} conn.close(); System.out.println("Disconnected from database"); } catch (Exception e) { e.printStackTrace();} } } ``` ### 6.4.2 Exemple Avec ODBC MS Access *Attention à cette utilisation avec la version Java 8!* ```java import java.sql.*; public class MysqlConnectODBC { public static void main(String[] args) { Connection conn = null; try { conn = DriverManager.getConnection("jdbc:ucanaccess://C:/Users/USTHB/Documents/Etudiant Access.accdb","",""); Statement infol = conn.createStatement(); ResultSet Result2 = infol.executeQuery("select * from Tablel"); while (Result2.next()) System.out.println(Result2.getString (1)+" "+Result2.getString (2)+" "+Result2.getString(3)); conn.close(); System.out.println("Disconnected_from_database"); } catch (Exception e) { System.out.println(e.toString())e.printStackTrace(); } } } ``` ### 6.4.3 L'exécution La Figure 6.3 montre les résultats d'exécution de l'exemple ci-dessus. **FIGURE 6.3: Résultat d'exécution.** ## 6.5 Conclusion Dans ce chapitre nous avons présenté la technologie JDBC permettant de se connecter à des bases de données. L'objectif est de développer des applications capables de se connecter à des serveurs de bases de données (SGBD).