Vous êtes sur la page 1sur 32

Développement Web - JDBC

Développement Web - JDBC

Jean-Michel Richer
jean-michel.richer@univ-angers.fr
http://www.info.univ-angers.fr/pub/richer

L3 Pro 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
6 Connection connection = DriverManager.getConnection(
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 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 :

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

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

Vous aimerez peut-être aussi