Département Informatique POO I4 2009-2010 TP 6: Accès aux bases des données avec NetBeans Plan : Introduction aux bases de données MySQL Rappel SQL Accès aux bases de données avec Java. Coordinateur: ZIDI Kamel 1 Département Informatique POO I4 2009-2010 But: On veut créer une application qui permet de récupérer des données d’une personne (cin, nom, prenom, adresse) qui se trouvent dans la base de données nommée magestion à partir d’une simple class Java. 1. Introduction aux bases de données MySQL MySQL est un système de gestion de bases de données relationnelles. Le SQL dans“MySQL” signifie “Structured Query Language” : le langage standard pour les traitements de bases de données. Référence du langage MySQL : Structure du langage Les chaînes Une chaîne est une séquence de caractères, entourée de guillemets simples (‘'’) ou doubles (‘"’) (simple seulement si vous êtes en mode ANSI). Exemples: 'une chaîne' "une autre chaîne" A l’intérieur d’une chaîne, certaines séquences de caractères ont une signification spéciale. Chacune d’elle commence par un anti-slash (‘\’), connu comme le caractère d’échappement. Par exemple pour utiliser un " en tant que composant de la chaîne "Ma chaîne possède un \"". On protège le " à l'aide d'un anti-slash Les nombres Les entiers sont représentés comme une séquence de chiffres. Les décimaux utilisent ‘.’ comme séparateur. Tous les types de nombres peuvent être précédés d’un ‘-’ pour indiquer une valeur négative. Un entier peut être utilisé dans un contexte décimal, il sera interprété comme le nombre décimal équivalent. Valeurs hexadécimales MySQL supporte les valeurs hexadécimales. Dans un contexte numérique, elles agissent comme des entiers (précision 64-bit). Dans un contexte de chaîne, elles agissent comme une chaîne binaire où chaque paire de caractères hexadécimaux est convertie en caractères : Exemple : 0xFF pour 255 en hexadécimal 2 Département Informatique POO I4 2009-2010 Valeurs NULL La valeur NULL signifie “pas de données” et est différente des valeurs comme 0 pour les nombres ou la chaîne vide pour les types chaîne NULL peut être représenté par \N lors de la récupération ou écriture avec des fichiers (LOAD DATA INFILE, SELECT ... INTO OUTFILE). 2. Rappel SQL a. Sélection SELECT champs FROM table; SELECT champs FROM table WHERE condition; b. Insertion INSERT INTO table Values (valeurs); c. Suppression DELETE FROM table WHERE condition; d. Modification UPDATE table SET colonne=valeur WHERE condition; 3. Accès aux bases de données avec Java : JDBC Les étapes à suivre pour réaliser ce TP sont les suivantes : Création d’une base de données Création d’une table Insertion des données Connection entre base de données et la classe Java Récupération des données (en utilisant les requêtes SQL) Gestion des erreurs. Obtenir JDBC Chaque constructeur de SGBD doit fournir son pilote jdbc. Accessible normalement sur son site officiel. Pour MySQL on aura besoin d'un dossier nommé com qu'on doit le copier dans le dossier src du projet. Le package utilisé pour les requêtes SQL est java.sql 3 Département Informatique POO I4 2009-2010 Étapes de connexion à une base de données MySQL ● Définir l'adresse ip ou nom de l'hôte abritant le serveur MySQL, s'il faut le port. ● Définir le nom de la base de données. ● Définir le nom d'utilisateur et mot de passe inscrit dans le serveur. Par défaut root et un mot de passe vide. ● Créer un objet de type Connection. ● Créer un objet de type Statement. ● Récupérer un objet ResultSet pour les requêtes select ou un entier pour les insertions et modifications. Gestion de la connexion La classe connexion permet de gérer une connexion entre l'application java et un serveur SGBD. On déclare un attribut cnx de type Connection Connection cnx = null; Etablir une connexion avec le serveur Définir le pilote utilisé Class.forName ("com.mysql.jdbc.Driver").newInstance (); Elle peut lancer une exception si le pilote est inexistant: ClassNotFoundException Se connecter au serveur try{ cnx = DriverManager.getConnection ("jdbc:mysql://hostname/dbname", username, passwd); } catch(Exception e){un message d'erreur} Où : hostname: nom de la machine du serveur ou son adresse ip username: nom d'utilisateur inscrit sur le serveur(par défaut root) 4 Département Informatique POO I4 2009-2010 dbname: nom de la base de données Elle peut lancer une exception si l'application n'arrive pas s à se connecter au SGBD: SQLException Faire des requêtes Créer un objet de type Statement Lancer une requête de mise à jour Il faut prévoir de gérer l'exception try{ Statement st = cnx.createStatement(); // Requête insertion st.executeUpdate(requete); } catch(SQLException e){un message d'erreur} Lancer une requête de sélection et récupérer les résultats try{ Statement st = cnx.createStatement(); // Requête sélection et récupération des données ResultSet rs=st.executeQuery(requete); if(rs.next()) { //affichage des données } else JOptionPane.showMessageDialog(this,"impossible de trouver la personne", "erreur", JOptionPane.ERROR_MESSAGE); } catch(SQLException e){un message d'erreur} => La classe ResultSet représente un curseur qui permet de lire les lignes renvoyées par une requête select. 5