Développement Web

publicité
Développement Web - JDBC
Développement Web - JDBC
Jean-Michel Richer
[email protected]
http://www.info.univ-angers.fr/pub/richer
M1/M2 Informatique 2010-2011
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
A quoi sert JDBC ?
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
Definition (JDBC Drivers)
Les Drivers (pilotes) permettent l’échange d’information entre
Java et le DBMS. Il existe 4 catégories de Drivers :
• Type 1 : JDBC-ODBC bridge drivers
• Type 2 : Native-API partly Java drivers
• Type 3 : Net-protocol All-Java drivers
• Type 4 : Native-protocol All-Java 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
Rappel : ODBC (Open Database Connectivity)
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
Connexion à la base de données
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
Connexion pour MySQL
1 try {
2
String dbURL = "jdbc:mysql://localhost/dbpersons";
3
// Avant JDBC 4.0
4
Class.forName("com.mysql.jdbc.driver");
5
Connection connection = DriverManager.getConnection(
6
7
dbUrl, "login", "password");
8
9 } catch(Execption e) {
10
e.printStackTrace();
11 }
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
Fonctionnement d’un Statement
• consiste à mettre en place un plan d’accès aux tables
• coûteux !
• la classe PreparedStatement optimise les traitements en
permettant d’établir une seule fois le plan d’accès
• pour l’exécution de plusieurs requêtes
14 / 32
Développement Web - JDBC
Utilisation de JDBC
java.sql.PreparedStatement
Sans PreparedStatement
1
2
3
4
5
6
7
8
9
10
Statement st= connection.createStatement();
for (Person p : list) {
// same request but generates access plan
st.executeUpdate("UPDATE persons "+
"SET pe name=’"+p.getName()+"’ "+
"WHERE pe id="+p.getId();
}
st.close();
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
2
3
4
5
6
7
8
9
10
PreparedStatement st = connection.prepareStatement(
"UPDATE persons SET pe name=? WHERE pe id=?"
);
for (Person p : list) {
st.setString(1, p.getName());
st.setInt(2, p.getId());
st.execute();
}
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
2
3
4
5
6
7
8
9
10
Statement st = connection.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM persons");
while (rs.next()) {
Persons p = new Persons();
p.setId( rs.getInt("pe id") );
// or p.setId( rs.getInt(1) );
p.setId( rs.getName("pe name") );
// or p.setId( rs.getName(2) );
list.add(p);
}
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 :
CREATE MEMORY TABLE PUBLIC.PERSONS(
PE_ID INTEGER GENERATED BY DEFAULT AS
IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,
PE_FIRST_NAME VARCHAR(20),
PE_LAST_NAME VARCHAR(20)
)
25 / 32
Développement Web - JDBC
Outils
HSQLDB
création de la base de données
Dans le répertoire du projet
• créer un sous-répertoire hsqldb
• cd hsqldb
• lancer
java -cp hsqldb.jar
org.hsqldb.util.DatabaseManagerSwing
• puis utiliser pour la connexion :
jdbc:hsqldb:file:dbpersons
26 / 32
Développement Web - JDBC
Outils
HSQLDB
création de la base de données
• choisir File, Open Script
• télécharger a.script
• puis cliquer sur Execute SQL
• quitter le programme
27 / 32
Développement Web - JDBC
Outils
HSQLDB - Lancer le serveur
HSQLDB
java -cp hsqldb.jar org.hsqldb.server.Server
--database.0 file:hsqldb/dbpersons
--dbname.0 dbpersons
• nom de la base : --dbname
• fichier de configuration : data/dbpersons
28 / 32
Développement Web - JDBC
Outils
HSQLDB - Lancer le serveur
Fichier de configuration : data/dbpersons.script
1 CREATE USER SA PASSWORD ’’
2 CREATE USER PERSUSER PASSWORD ’PERSPASS’
3 CREATE SCHEMA PUBLIC AUTHORIZATION DBA
4 SET SCHEMA PUBLIC
5 CREATE MEMORY TABLE PUBLIC.PERSONS(PE ID INTEGER GENERATED BY DEFAULT AS
IDENTITY(START WITH 1)
6 NOT NULL PRIMARY KEY,PE FIRST NAME VARCHAR(20),PE LAST NAME VARCHAR(20))
7 GRANT DBA TO SA
8 GRANT SELECT ON TABLE PUBLIC.PERSONS TO PERSUSER
9
29 / 32
Développement Web - JDBC
Outils
HSQLDB - Lancer le client
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 - Fermer le serveur
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
Téléchargement