Cours 3 Contenu du cours : " " " Accès à une base de données Exécution de requêtes et lectures de résultats Les méta-données JDBC L'API JDBC est utilisée pour intéragir avec une base de données. 2 Privilèges JDBC 4 Accès à une base de données en java. Pour accéder à une base de données en java, nous devons réaliser les étapes suivantes : • • Charger un pilote spécifique à la base de données. Obtenir une connexion avec la base de données (session). • Obtenir un « Statement » qui permettra d'exécuter les requêtes SQL. Obtenir des « ResultSet » contenant les données de la table. • Fermer la connexion à la base de données. • L'accès à une base de données se fait toujours selon le même schéma. JDBC import java.sql.*; 5 public class AfficherEmployes { // JDBC driver name static final String static final String static final String static final String and database URL JDBC_DRIVER = "com.mysql.jdbc.Driver"; DATABASE_URL = "jdbc:mysql://localhost/ressources_humaines"; USER = “user"; PASS = “user"; try { // Charger le pilote Class.forName( JDBC_DRIVER ); // etablir la connection connection = DriverManager.getConnection( DATABASE_URL, USER, PASS); } // end try catch ( ClassNotFoundException classNotFound ) { System.err.prinln(“Impossible de charger le pilote”); classNotFound.printStackTrace(); System.exit( 1 ); } // end catch catch ( SQLException sqlException ){ System.err.prinln(“Connetion Impossible”); sqlException.printStackTrace(); System.exit( 1 ); } // end catch … Charger un pilote spécifique à la base de données et obtenir une connexion à la base de données. JDBC Charger un pilote spécifique à la base de données et obtenir une connexion à la base de données. Pour charger un pilote spécifique à la base de données, on utilise la méthode statique de la classe java.lang.Class : Class.forName( <NomDeLaClasseDuPilote> ); Ex: Class.forName(“com.mysql.jdbc.Driver”); Cette méthode peut lancer l'exception ClassNotFoundException si la classe spécifiée n'est pas dans votre classpath. Pour obtenir une connexion avec la base de données , on utlise la méthode statique de la classe java.sql.DriverManager : DriverManager.getConnection( url, user, pwd ) DriverManager.getConnection( url) Cette méthode prend en argument l'url de la base de données Elle peut lancer l'exception SQLException en cas de problème. Cette procédure permet de se connecter à une base de donnée distante ou locale . 6 Classpath • Deux manières pour spécifier où se trouve le driver 1. Au lancement du programme java -classpath c:\drives\mysql-connector-java-5.1.7-bin.jar;. AfficherEmployes 2. Copier le driver dans le répertoire jre\lib\ext de votre jdk (C:\Program Files\Java\jdk1.5.0_15\jre\lib\ext) et lancer normalement le programme java AfficherEmployes JDBC 8 Obtenir un « Statement » static final String REQUETE_SQL = "SELECT * FROM employes“; Il nous faut obtenir un Objet de type Statement pour envoyer nos requêtes SQL. Ces requêtes peuvent alors nous rertourner un ResultSet. JDBC 9 Obtenir un « Statement » Pour obtenir un statement , il faut utiliser la méthode connection.createStatement(); Cette méthode renvoie un objet java implémentant l'interface java.sql.Statement Cet objet peut alors être utilisé pour exécuter des requêtes SQL : statement.executeQuery( <RequeteSQL sous forme de String> ); statement.executeUpdate( <RequeteSQL sous forme de String> ); Certaines requêtes renvoient un jeu de données : un java.sql.ResultSet. Ce ResultSet sera utilisé pour lire les données... Il nous faut obtenir un Objet de type Statement pour envoyer nos requêtes SQL. Ces requêtes peuvent alors rertourner un ResultSet. JDBC 10 Manipulation des ResultSets Il faut toujours placer le curseur sur le premier enregistrement avant d’utiliser un ResultSet Ensuite on peut parcourir notre ensemble de données !!! Au début le curseur du ResultSet pointe sur l'enregistrement -1 !!!! JDBC 11 Manipulation des ResultSets Ces opérations sont à risque On utilise la méthode appropriée de ResultSet pour lire la donnée de la colonne « i » Il existe de nombreuses méthodes permettant de lire tous les types de données primitifs dans la classe ResultSet. JDBC 12 Les Meta Données Les meta données sont des données sur les données. Chaque ResultSet possède ses propres MetaDonnées. Elles sont utilisées pour obtenir les noms des colonnes dans un ResultSet ainsi que le type des données qui se trouvent dans chacune d'elles. Obtention des metaData. Utilisation des metaData. Les méta données sont stockées dans un ResultSetMetaData. JDBC 13 Les Meta Données les metadonnées renseignent sur le type des données dans chaque colonne. On peut également obtenir le type des données sous forme de chaîne. On utilise les métadonnées pour connaître le type des données dans chaque colonne du ResultSet. Exécution