Académique Documents
Professionnel Documents
Culture Documents
Jean-Michel Richer
jean-michel.richer@univ-angers.fr
http://www.info.univ-angers.fr/pub/richer
1 / 32
Développement Web - JDBC
Plan
Plan
1 Préambule
2 Utilisation de JDBC
3 Outils
2 / 32
Développement Web - JDBC
Préambule
Préambule
Préambule
3 / 32
Développement Web - JDBC
Préambule
Utilisation de JDBC
Objectifs
• découvrir et apprendre à utiliser JDBC (Java DataBase
Connectivity)
• utilisation avec MySQL
• utilisation avec HSQLDB
4 / 32
Développement Web - JDBC
Préambule
Definition (JDBC)
• Java DataBase Connectivity introduit par SUN en 1996
• permet de dialoguer avec un DBMS (DataBase
Management System)
• au travers d’une API (Application Programming Inteface)
• grâce au langage SQL (Structured Query Language)
5 / 32
Développement Web - JDBC
Préambule
Drivers
6 / 32
Développement Web - JDBC
Préambule
Drivers
Types de pilotes
• Type 1 : traduit JDBC en ODBC et utilise le pilote ODBC
pour communiquer avec le DBMS
• Type 2 : pilote écrit en Java et dans un langage natif
(C/C++) qui communique avec l’API du DBMS
• Type 3 : pilote en Java qui communique au travers d’un
serveur qui communique avec le DBMS
• Type 4 : pilote en Java qui communique avec le DBMS
7 / 32
Développement Web - JDBC
Utilisation de JDBC
Utilisation de JDBC
Utilisation de JDBC
8 / 32
Développement Web - JDBC
Utilisation de JDBC
Fonctionnement
Fonctionnement
1 établir une connexion avec la base de données
(DriverManager )
2 construire et exécuter une requête (Statement ou
PreparedStatement)
3 traiter le résultat (ResultSet)
9 / 32
Développement Web - JDBC
Utilisation de JDBC
URL et Connexion
• on réalise la connexion au travers d’une URL
jdbc:nom du protocole:URL BD
• des exceptions sont levées en cas de problème :
SQLException, ClassNotFound
10 / 32
Développement Web - JDBC
Utilisation de JDBC
Exemple de connexion
11 / 32
Développement Web - JDBC
Utilisation de JDBC
Autres pilotes
Autres pilotes
• JDBC-ODBC : sun.jdbc.odbc.JdbcOdbcDriver
• MySQL : com.mysql.jdbc.Driver
• DB2 : com.ibm.db2.jcc.DB2Driver
• HSQLDB : org.hsqldb.jdbc.JDBCDriver
12 / 32
Développement Web - JDBC
Utilisation de JDBC
java.sql.Statement
java.sql.Statement
• modélise une requête SQL
• executeQuery(String query) : execute la requête et
retourne un ResultSet (SELECT)
• executeUpdate(String query) renvoie le nombre de lignes
modifiées (INSERT, DELETE, UPDATE)
• execute(String query) à utiliser dans les deux cas
13 / 32
Développement Web - JDBC
Utilisation de JDBC
java.sql.PreparedStatement
14 / 32
Développement Web - JDBC
Utilisation de JDBC
java.sql.PreparedStatement
Sans PreparedStatement
1 Statement st= connection.createStatement();
2
3 for (Person p : list) {
4 // same request but generates access plan
5 st.executeUpdate("UPDATE persons "+
6 "SET pe name=’"+p.getName()+"’ "+
7 "WHERE pe id="+p.getId();
8 }
9 st.close();
10
15 / 32
Développement Web - JDBC
Utilisation de JDBC
java.sql.PreparedStatement
Utilisation
• on utilise ? pour représenter un champ
• les méthodes setXXX(int, Object) pour le renseigner
Avec PreparedStatement
1 PreparedStatement st = connection.prepareStatement(
2 "UPDATE persons SET pe name=? WHERE pe id=?"
3 );
4
5 for (Person p : list) {
6 st.setString(1, p.getName());
7 st.setInt(2, p.getId());
8 st.execute();
9 }
10 st.close();
16 / 32
Développement Web - JDBC
Utilisation de JDBC
java.sql.ResultSet
java.sql.ResultSet
• permet le traitement des résultats
• représente un ensemble de résultats (lignes) extraites de
la BD
• on itère au travers du container grâce à next()
• on récupère les colonnes grâces aux méthodes :
• getXXX(int columnIndex)
• getXXX(String columnName)
• avec XXX = Int, String, Float, Long, Date, Timestamp
17 / 32
Développement Web - JDBC
Utilisation de JDBC
java.sql.ResultSet
Utilisation de ResultSet
1 Statement st = connection.createStatement();
2 ResultSet rs = st.executeQuery("SELECT * FROM persons");
3 while (rs.next()) {
4 Persons p = new Persons();
5 p.setId( rs.getInt("pe id") );
6 // or p.setId( rs.getInt(1) );
7 p.setId( rs.getName("pe name") );
8 // or p.setId( rs.getName(2) );
9 list.add(p);
10 }
18 / 32
Développement Web - JDBC
Utilisation de JDBC
Les Transactions
JDBC et transactions
• JDBC permet de gérer les transactions
• désactiver la validation automatique :
connection.setAutoCommit(false)
• effectuer des requêtes
• valider : connection.commit()
• ou invalider : connection.rollback()
19 / 32
Développement Web - JDBC
Outils
Outils
Outils
20 / 32
Développement Web - JDBC
Outils
MySQL
MySQL
Pour communiquer avec le serveur MySQL :
• télécharger depuis www.mysql.com : JDBC Driver for
MySQL (Connector/J)
• installer le .jar dans WEB-INF/lib (mysql-connector)
• pilote : com.mysql.jdbc.driver
• url : jdbc:mysql://localhost/db
21 / 32
Développement Web - JDBC
Outils
DBMS en mémoire
DBMS en mémoire
• à utiliser pour le debugging
• parfois pas réellement compatible SQL
• plus ou moins facile à installer et utiliser (ex : HSQLDB)
exemples :
• HSQLDB
• Derby (Apache DB)
22 / 32
Développement Web - JDBC
Outils
HSQLDB
Hyper SQL DB
Caractéristiques de HSQLDB :
• DBMS écrit en Java
• réside en mémoire
• lors de l’arrêt du serveur on écrit les données dans un
fichier
23 / 32
Développement Web - JDBC
Outils
HSQLDB
HSQLDB
Pour communiquer avec le serveur HSQLDB :
• télécharger sur www.hsqldb.org
• installer hsqldb.jar dans WEB-INF/lib
• pilote : org.hsqldb.jdbc.JDBCDriver
• url : jdbc:hsqldb:hsql://localhost/db
24 / 32
Développement Web - JDBC
Outils
HSQLDB
Création du script
Créer le script suivant et sauver dans a.script :
25 / 32
Développement Web - JDBC
Outils
HSQLDB
26 / 32
Développement Web - JDBC
Outils
HSQLDB
27 / 32
Développement Web - JDBC
Outils
HSQLDB
java -cp hsqldb.jar org.hsqldb.server.Server
--database.0 file:hsqldb/dbpersons
--dbname.0 dbpersons
28 / 32
Développement Web - JDBC
Outils
29 / 32
Développement Web - JDBC
Outils
HSQLDB
java -cp hsqldb.jar
org.hsqldb.util.DatabaseManagerSwing
se connecter avec :
• jdbc:hsqldb:hsql://localhost/dbpersons
• login : SA
• mot de passe : vide
utiliser les mêmes paramètres pour la connection JDBC
30 / 32
Développement Web - JDBC
Outils
HSQLDB
• lancer
java -cp hsqldb.jar
org.hsqldb.util.DatabaseManagerSwing
• se connecter avec
jdbc:hsqldb:hsql://localhost/dbpersons
• login : SA
• mot de passe : vide
• exécuter la requête SQL : SHUTDOWN
31 / 32
Développement Web - JDBC
Outils
Fin
Fin
32 / 32