Developpement Web - JDBC
Developpement Web - JDBC
Jean-Michel [email protected]
http://www.info.univ-angers.fr/pub/richer
L3 Pro Informatique 2010-2011
1 / 32
Developpement Web - JDBC
Plan
Plan
1 Preambule
2 Utilisation de JDBC
3 Outils
2 / 32
Developpement Web - JDBC
Preambule
Preambule
Preambule
3 / 32
Developpement Web - JDBC
Preambule
Utilisation de JDBC
Objectifs
• decouvrir et apprendre a utiliser JDBC (Java DataBaseConnectivity)
• utilisation avec MySQL
• utilisation avec HSQLDB
4 / 32
Developpement Web - JDBC
Preambule
A quoi sert JDBC ?
Definition (JDBC)
• Java DataBase Connectivity introduit par SUN en 1996
• permet de dialoguer avec un DBMS (DataBaseManagement System)
• au travers d’une API (Application Programming Inteface)
• grace au langage SQL (Structured Query Language)
5 / 32
Developpement Web - JDBC
Preambule
Drivers
Definition (JDBC Drivers)
Les Drivers (pilotes) permettent l’echange d’information entreJava et le DBMS. Il existe 4 categories 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
Developpement Web - JDBC
Preambule
Drivers
Types de pilotes
• Type 1 : traduit JDBC en ODBC et utilise le pilote ODBCpour communiquer avec le DBMS
• Type 2 : pilote ecrit 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’unserveur qui communique avec le DBMS
• Type 4 : pilote en Java qui communique avec le DBMS
Rappel : ODBC (Open Database Connectivity)
7 / 32
Developpement Web - JDBC
Utilisation de JDBC
Utilisation de JDBC
Utilisation de JDBC
8 / 32
Developpement Web - JDBC
Utilisation de JDBC
Fonctionnement
Fonctionnement
1 etablir une connexion avec la base de donnees(DriverManager )
2 construire et executer une requete (Statement ouPreparedStatement)
3 traiter le resultat (ResultSet)
9 / 32
Developpement Web - JDBC
Utilisation de JDBC
Connexion a la base de donnees
URL et Connexion• on realise la connexion au travers d’une URLjdbc:nom du protocole:URL BD
• des exceptions sont levees en cas de probleme :SQLException, ClassNotFound
10 / 32
Developpement Web - JDBC
Utilisation de JDBC
Exemple de connexion
Connexion pour MySQL1 try {2 String dbURL = "jdbc:mysql://localhost/dbpersons";3 // Avant JDBC 4.04 Class.forName("com.mysql.jdbc.driver");56 Connection connection = DriverManager.getConnection(7 dbUrl, "login", "password");89 } catch(Execption e) {
10 e.printStackTrace();11 }
11 / 32
Developpement 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
Developpement Web - JDBC
Utilisation de JDBC
java.sql.Statement
java.sql.Statement
• modelise une requete SQL
• executeQuery(String query) : execute la requete etretourne un ResultSet (SELECT)
• executeUpdate(String query) renvoie le nombre de lignesmodifiees (INSERT, DELETE, UPDATE)
• execute(String query) a utiliser dans les deux cas
13 / 32
Developpement Web - JDBC
Utilisation de JDBC
java.sql.PreparedStatement
Fonctionnement d’un Statement• consiste a mettre en place un plan d’acces aux tables
• couteux !
• la classe PreparedStatement optimise les traitements enpermettant d’etablir une seule fois le plan d’acces
• pour l’execution de plusieurs requetes
14 / 32
Developpement Web - JDBC
Utilisation de JDBC
java.sql.PreparedStatement
Sans PreparedStatement1 Statement st= connection.createStatement();23 for (Person p : list) {4 // same request but generates access plan5 st.executeUpdate("UPDATE persons "+6 "SET pe name=’"+p.getName()+"’ "+7 "WHERE pe id="+p.getId();8 }9 st.close();
10
15 / 32
Developpement Web - JDBC
Utilisation de JDBC
java.sql.PreparedStatement
Utilisation• on utilise ? pour representer un champ
• les methodes setXXX(int, Object) pour le renseigner
Avec PreparedStatement1 PreparedStatement st = connection.prepareStatement(2 "UPDATE persons SET pe name=? WHERE pe id=?"3 );45 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
Developpement Web - JDBC
Utilisation de JDBC
java.sql.ResultSet
java.sql.ResultSet
• permet le traitement des resultats
• represente un ensemble de resultats (lignes) extraites dela BD
• on itere au travers du container grace a next()• on recupere les colonnes graces aux methodes :
• getXXX(int columnIndex)• getXXX(String columnName)• avec XXX = Int, String, Float, Long, Date, Timestamp
17 / 32
Developpement Web - JDBC
Utilisation de JDBC
java.sql.ResultSet
Utilisation de ResultSet1 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
Developpement Web - JDBC
Utilisation de JDBC
Les Transactions
JDBC et transactions• JDBC permet de gerer les transactions
• desactiver la validation automatique :connection.setAutoCommit(false)
• effectuer des requetes
• valider : connection.commit()
• ou invalider : connection.rollback()
19 / 32
Developpement Web - JDBC
Outils
Outils
Outils
20 / 32
Developpement Web - JDBC
Outils
MySQL
MySQL
Pour communiquer avec le serveur MySQL :
• telecharger depuis www.mysql.com : JDBC Driver forMySQL (Connector/J)
• installer le .jar dans WEB-INF/lib (mysql-connector)
• pilote : com.mysql.jdbc.driver
• url : jdbc:mysql://localhost/db
21 / 32
Developpement Web - JDBC
Outils
DBMS en memoire
DBMS en memoire• a utiliser pour le debugging
• parfois pas reellement compatible SQL
• plus ou moins facile a installer et utiliser (ex : HSQLDB)
exemples :
• HSQLDB
• Derby (Apache DB)
22 / 32
Developpement Web - JDBC
Outils
HSQLDB
Hyper SQL DB
Caracteristiques de HSQLDB :
• DBMS ecrit en Java
• reside en memoire
• lors de l’arret du serveur on ecrit les donnees dans unfichier
23 / 32
Developpement Web - JDBC
Outils
HSQLDB
HSQLDB
Pour communiquer avec le serveur HSQLDB :
• telecharger sur www.hsqldb.org
• installer hsqldb.jar dans WEB-INF/lib
• pilote : org.hsqldb.jdbc.JDBCDriver
• url : jdbc:hsqldb:hsql://localhost/db
24 / 32
Developpement Web - JDBC
Outils
HSQLDB
Creation du script
Creer le script suivant et sauver dans a.script :
CREATE MEMORY TABLE PUBLIC.PERSONS(PE_ID INTEGER GENERATED BY DEFAULT ASIDENTITY(START WITH 1) NOT NULL PRIMARY KEY,PE_FIRST_NAME VARCHAR(20),PE_LAST_NAME VARCHAR(20)
)
25 / 32
Developpement Web - JDBC
Outils
HSQLDB
creation de la base de donnees
Dans le repertoire du projet
• creer un sous-repertoire hsqldb
• cd hsqldb
• lancer
java -cp hsqldb.jarorg.hsqldb.util.DatabaseManagerSwing
• puis utiliser pour la connexion :jdbc:hsqldb:file:dbpersons
26 / 32
Developpement Web - JDBC
Outils
HSQLDB
creation de la base de donnees• choisir File, Open Script
• telecharger a.script
• puis cliquer sur Execute SQL
• quitter le programme
27 / 32
Developpement Web - JDBC
Outils
HSQLDB - Lancer le serveur
HSQLDBjava -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
Developpement Web - JDBC
Outils
HSQLDB - Lancer le serveur
Fichier de configuration : data/dbpersons.script1 CREATE USER SA PASSWORD ’’2 CREATE USER PERSUSER PASSWORD ’PERSPASS’3 CREATE SCHEMA PUBLIC AUTHORIZATION DBA4 SET SCHEMA PUBLIC5 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 SA8 GRANT SELECT ON TABLE PUBLIC.PERSONS TO PERSUSER
9
29 / 32
Developpement Web - JDBC
Outils
HSQLDB - Lancer le client
HSQLDBjava -cp hsqldb.jar
org.hsqldb.util.DatabaseManagerSwing
se connecter avec :
• jdbc:hsqldb:hsql://localhost/dbpersons
• login : SA
• mot de passe : vide
utiliser les memes parametres pour la connection JDBC
30 / 32
Developpement Web - JDBC
Outils
HSQLDB - Fermer le serveur
HSQLDB• lancer
java -cp hsqldb.jarorg.hsqldb.util.DatabaseManagerSwing
• se connecter avecjdbc:hsqldb:hsql://localhost/dbpersons
• login : SA
• mot de passe : vide
• executer la requete SQL : SHUTDOWN
31 / 32
Developpement Web - JDBC
Outils
Fin
Fin
32 / 32