Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf ·...

83
GIS 2A Bases de donn ´ ees Avanc ´ ees Le protocole JDBC (Java DataBase Connectivity) Olivier Caron Polytech Lille Avenue Paul Langevin Cit´ e Scientifique Universit ´ e de Lille 59655 Villeneuve d’Ascq cedex http://ocaron.polytech-lille.net [email protected] Olivier Caron 23 ao ˆ ut 2019 1/35

Transcript of Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf ·...

Page 1: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Le protocole JDBC(Java DataBase Connectivity)

Olivier Caron

Polytech LilleAvenue Paul Langevin Cite ScientifiqueUniversite de Lille59655 Villeneuve d’Ascq cedex

http://[email protected]

Olivier Caron 23 aout 2019 1/35

Page 2: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

L’ancetre ODBC

Programme ODBCselect * from personne

ODBC ODBC ODBC

Oracle Postgres Excel

Olivier Caron 23 aout 2019 2/35

Page 3: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

JDBC

• Langage Java (multi-plateforme :-)

• Interface de programmation (API)1

• Adopte et implemente par presque tous les constructeurs

• Passerelle ODBC-JDBC

1Un fichier First.java contenant les exemples JDBC du cours est disponible surmes pages webs

Olivier Caron 23 aout 2019 3/35

Page 4: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

JDBC

• Langage Java (multi-plateforme :-)

• Interface de programmation (API)1

• Adopte et implemente par presque tous les constructeurs

• Passerelle ODBC-JDBC

1Un fichier First.java contenant les exemples JDBC du cours est disponible surmes pages webs

Olivier Caron 23 aout 2019 3/35

Page 5: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

JDBC

• Langage Java (multi-plateforme :-)

• Interface de programmation (API)1

• Adopte et implemente par presque tous les constructeurs

• Passerelle ODBC-JDBC

1Un fichier First.java contenant les exemples JDBC du cours est disponible surmes pages webs

Olivier Caron 23 aout 2019 3/35

Page 6: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

JDBC

• Langage Java (multi-plateforme :-)

• Interface de programmation (API)1

• Adopte et implemente par presque tous les constructeurs

• Passerelle ODBC-JDBC

1Un fichier First.java contenant les exemples JDBC du cours est disponible surmes pages webs

Olivier Caron 23 aout 2019 3/35

Page 7: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Des utilisations possibles des protocoles

Programme JDBCselect * from personne

ODBC JDBC ODBC

Oracle Postgres Excel

ODBC JDBC

JDBC-ODBC

...Access Access

Olivier Caron 23 aout 2019 4/35

Page 8: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Structuration d’un programme JDBC

Votre code JavaProgramme Java

JDBC APIjava.sql.* et/ou javax.sql.*

Driver Cible

JDBC API

/usr/share/java/postgresql­jdbc4.jar

Base de données

Execution d’un programme Java-JDBC :java -cp /usr/share/java/postgresql-jdbc.jar:. progs.First

Olivier Caron 23 aout 2019 5/35

Page 9: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Deroulement d’un programme JDBC

• Deroulement classique :

1 Connexion a une base2 Execution de requetes et recuperation des donnees3 Deconnexion

• Plein d’autres variantes (ex : acces multi-bases)

Olivier Caron 23 aout 2019 6/35

Page 10: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Deroulement d’un programme JDBC

• Deroulement classique :1 Connexion a une base

2 Execution de requetes et recuperation des donnees3 Deconnexion

• Plein d’autres variantes (ex : acces multi-bases)

Olivier Caron 23 aout 2019 6/35

Page 11: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Deroulement d’un programme JDBC

• Deroulement classique :1 Connexion a une base2 Execution de requetes et recuperation des donnees

3 Deconnexion

• Plein d’autres variantes (ex : acces multi-bases)

Olivier Caron 23 aout 2019 6/35

Page 12: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Deroulement d’un programme JDBC

• Deroulement classique :1 Connexion a une base2 Execution de requetes et recuperation des donnees3 Deconnexion

• Plein d’autres variantes (ex : acces multi-bases)

Olivier Caron 23 aout 2019 6/35

Page 13: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Deroulement d’un programme JDBC

• Deroulement classique :1 Connexion a une base2 Execution de requetes et recuperation des donnees3 Deconnexion

• Plein d’autres variantes (ex : acces multi-bases)

Olivier Caron 23 aout 2019 6/35

Page 14: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Etablissement d’une connexion

• Pour se connecter a une base, il faut fournir les elements suivants :

1 L’adresse du serveur de base de donnees (son nom de machine)2 Le type du serveur de base de donnees (postgresql, mysql, oracle,. . . )3 Le nom de la base4 Les nom et mot de passe de l’utilisateur reference du serveur

• Les elements 1 a 3 seront fournis via une URL de la forme :jdbc:typeServeur://adresseServeur/nomBaseDonnees

Exemple :jdbc:postgresql://houplin/videoclub

• Ces donnees seront idealement externalisees du code source Javadans un fichier de proprietes.

Olivier Caron 23 aout 2019 7/35

Page 15: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Etablissement d’une connexion

• Pour se connecter a une base, il faut fournir les elements suivants :1 L’adresse du serveur de base de donnees (son nom de machine)

2 Le type du serveur de base de donnees (postgresql, mysql, oracle,. . . )3 Le nom de la base4 Les nom et mot de passe de l’utilisateur reference du serveur

• Les elements 1 a 3 seront fournis via une URL de la forme :jdbc:typeServeur://adresseServeur/nomBaseDonnees

Exemple :jdbc:postgresql://houplin/videoclub

• Ces donnees seront idealement externalisees du code source Javadans un fichier de proprietes.

Olivier Caron 23 aout 2019 7/35

Page 16: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Etablissement d’une connexion

• Pour se connecter a une base, il faut fournir les elements suivants :1 L’adresse du serveur de base de donnees (son nom de machine)2 Le type du serveur de base de donnees (postgresql, mysql, oracle,. . . )

3 Le nom de la base4 Les nom et mot de passe de l’utilisateur reference du serveur

• Les elements 1 a 3 seront fournis via une URL de la forme :jdbc:typeServeur://adresseServeur/nomBaseDonnees

Exemple :jdbc:postgresql://houplin/videoclub

• Ces donnees seront idealement externalisees du code source Javadans un fichier de proprietes.

Olivier Caron 23 aout 2019 7/35

Page 17: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Etablissement d’une connexion

• Pour se connecter a une base, il faut fournir les elements suivants :1 L’adresse du serveur de base de donnees (son nom de machine)2 Le type du serveur de base de donnees (postgresql, mysql, oracle,. . . )3 Le nom de la base

4 Les nom et mot de passe de l’utilisateur reference du serveur

• Les elements 1 a 3 seront fournis via une URL de la forme :jdbc:typeServeur://adresseServeur/nomBaseDonnees

Exemple :jdbc:postgresql://houplin/videoclub

• Ces donnees seront idealement externalisees du code source Javadans un fichier de proprietes.

Olivier Caron 23 aout 2019 7/35

Page 18: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Etablissement d’une connexion

• Pour se connecter a une base, il faut fournir les elements suivants :1 L’adresse du serveur de base de donnees (son nom de machine)2 Le type du serveur de base de donnees (postgresql, mysql, oracle,. . . )3 Le nom de la base4 Les nom et mot de passe de l’utilisateur reference du serveur

• Les elements 1 a 3 seront fournis via une URL de la forme :jdbc:typeServeur://adresseServeur/nomBaseDonnees

Exemple :jdbc:postgresql://houplin/videoclub

• Ces donnees seront idealement externalisees du code source Javadans un fichier de proprietes.

Olivier Caron 23 aout 2019 7/35

Page 19: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Etablissement d’une connexion

• Pour se connecter a une base, il faut fournir les elements suivants :1 L’adresse du serveur de base de donnees (son nom de machine)2 Le type du serveur de base de donnees (postgresql, mysql, oracle,. . . )3 Le nom de la base4 Les nom et mot de passe de l’utilisateur reference du serveur

• Les elements 1 a 3 seront fournis via une URL de la forme :jdbc:typeServeur://adresseServeur/nomBaseDonnees

Exemple :jdbc:postgresql://houplin/videoclub

• Ces donnees seront idealement externalisees du code source Javadans un fichier de proprietes.

Olivier Caron 23 aout 2019 7/35

Page 20: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Etablissement d’une connexion

• Pour se connecter a une base, il faut fournir les elements suivants :1 L’adresse du serveur de base de donnees (son nom de machine)2 Le type du serveur de base de donnees (postgresql, mysql, oracle,. . . )3 Le nom de la base4 Les nom et mot de passe de l’utilisateur reference du serveur

• Les elements 1 a 3 seront fournis via une URL de la forme :jdbc:typeServeur://adresseServeur/nomBaseDonnees

Exemple :jdbc:postgresql://houplin/videoclub

• Ces donnees seront idealement externalisees du code source Javadans un fichier de proprietes.

Olivier Caron 23 aout 2019 7/35

Page 21: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Fichier de proprietes

• Un fichier de proprietes permet d’avoir un code evolutif sansrecompilation

• Soit le fichier de proprietes de nom ”database.properties” :

jdbc . serverType=pos tg resq ljdbc . serverHost=houp l injdbc .dbName= t e s tjdbc . user=adminjdbc . password=secre t

Olivier Caron 23 aout 2019 8/35

Page 22: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Exemple d’une connexion JDBC (1/2)

package progs ;

import java . sq l .∗ ;import java . i o .∗ ;import java . u t i l . P rope r t i es ;

public class F i r s t {public s t a t i c void main ( S t r i n g args [ ] ) {

t ry {Proper t i es props= new Proper t i es ( ) ;F i le InputSt ream i n =new Fi le InputSt ream ( ” database . p r o p e r t i e s ” ) ;props . load ( i n ) ;S t r i n g u r l = ” jdbc : ” +

props . ge tProper ty ( ” jdbc . serverType ” ) + ” : / / ” +props . ge tProper ty ( ” jdbc . serverHost ” ) + ” / ” +props . ge tProper ty ( ” jdbc .dbName” ) ;

S t r i n g user=props . ge tProper ty ( ” jdbc . user ” ) ;S t r i n g password=props . ge tProper ty ( ” jdbc . password ” ) ;

Olivier Caron 23 aout 2019 9/35

Page 23: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Exemple d’une connexion JDBC (2/2)

Connection session = DriverManager . getConnect ion ( u r l , user , password ) ;System . out . p r i n t l n ( ” Connection e t a b l i e ” ) ;

} catch ( Fi leNotFoundExcept ion e1 ) {System . e r r . p r i n t l n ( ” F i c h i e r de p r o p r i e t es non t rouv e ” ) ;

} catch ( IOExcept ion e2 ) {System . e r r . p r i n t l n ( ” Er reur l e c t u r e f i c h i e r p r o p r i e t e ” ) ;

} catch ( SQLException e ) {System . e r r . p r i n t l n ( ” Er reur connexion base ” ) ;

}}}

Olivier Caron 23 aout 2019 10/35

Page 24: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

L’interface Statement

• Le programme precedent a permis d’obtenir une variable sessionde type Connexion.

• Un objet de type Statement est necessaire pour definir desrequetes SQL et recevoir des donnees issues de ces requetes.

• Les donnees issues de requetes select sont stockees dans desobjets de type ResultSet.

• La fermeture d’un Statement engendre la fermeture automatiquede tous les ResultSet associes.

Olivier Caron 23 aout 2019 11/35

Page 25: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

L’interface Statement

• Le programme precedent a permis d’obtenir une variable sessionde type Connexion.

• Un objet de type Statement est necessaire pour definir desrequetes SQL et recevoir des donnees issues de ces requetes.

• Les donnees issues de requetes select sont stockees dans desobjets de type ResultSet.

• La fermeture d’un Statement engendre la fermeture automatiquede tous les ResultSet associes.

Olivier Caron 23 aout 2019 11/35

Page 26: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

L’interface Statement

• Le programme precedent a permis d’obtenir une variable sessionde type Connexion.

• Un objet de type Statement est necessaire pour definir desrequetes SQL et recevoir des donnees issues de ces requetes.

• Les donnees issues de requetes select sont stockees dans desobjets de type ResultSet.

• La fermeture d’un Statement engendre la fermeture automatiquede tous les ResultSet associes.

Olivier Caron 23 aout 2019 11/35

Page 27: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

L’interface Statement

• Le programme precedent a permis d’obtenir une variable sessionde type Connexion.

• Un objet de type Statement est necessaire pour definir desrequetes SQL et recevoir des donnees issues de ces requetes.

• Les donnees issues de requetes select sont stockees dans desobjets de type ResultSet.

• La fermeture d’un Statement engendre la fermeture automatiquede tous les ResultSet associes.

Olivier Caron 23 aout 2019 11/35

Page 28: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Statement : requetes de modification

• Toutes les methodes doivent prendre en compte SQLException

• La methode createStatement permet d’obtenir un objet detype Statement a partir d’un objet de type Connection (lig. 1)

• La methode int executeUpdate(StringrequeteSQL) execute toute requete SQL (hors select) etretourne le nombre d’elements concernes par la commande (ligs4-5).

1 Statement stmt = session . createStatement ( ) ;2 stmt . executeUpdate ( ” c reate tab l e t e s t e r ” +3 ” (num i n t e g e r pr imary key , ch t e x t ) ” ) ;4 i n t nb= stmt . executeUpdate ( ” i n s e r t i n t o t e s t e r values ” +5 ” ( 1 , ’ dupont ’ ) , ( 2 , ’ durant ’ ) ” ) ;6 System . out . p r i n t l n ( nb+ ” l i g n e s ins e r ees ” ) ;

Olivier Caron 23 aout 2019 12/35

Page 29: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Consultation de la base

• Le processus de consultation (et meme de modification) est lesuivant :

1 Creation d’un objet de type Statement. Selon les parametresfournis lors de cette etape, les possibilites de lecture des donneesrecues ainsi que d’ecriture different.

2 Execution d’une requete SQL de type Select, donnees stockeesdans un objet de type ResultSet.

3 Consultation/modification des donnees d’un ResultSet

Olivier Caron 23 aout 2019 13/35

Page 30: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Consultation de la base

• Le processus de consultation (et meme de modification) est lesuivant :

1 Creation d’un objet de type Statement. Selon les parametresfournis lors de cette etape, les possibilites de lecture des donneesrecues ainsi que d’ecriture different.

2 Execution d’une requete SQL de type Select, donnees stockeesdans un objet de type ResultSet.

3 Consultation/modification des donnees d’un ResultSet

Olivier Caron 23 aout 2019 13/35

Page 31: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Consultation de la base

• Le processus de consultation (et meme de modification) est lesuivant :

1 Creation d’un objet de type Statement. Selon les parametresfournis lors de cette etape, les possibilites de lecture des donneesrecues ainsi que d’ecriture different.

2 Execution d’une requete SQL de type Select, donnees stockeesdans un objet de type ResultSet.

3 Consultation/modification des donnees d’un ResultSet

Olivier Caron 23 aout 2019 13/35

Page 32: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Consultation de la base

• Le processus de consultation (et meme de modification) est lesuivant :

1 Creation d’un objet de type Statement. Selon les parametresfournis lors de cette etape, les possibilites de lecture des donneesrecues ainsi que d’ecriture different.

2 Execution d’une requete SQL de type Select, donnees stockeesdans un objet de type ResultSet.

3 Consultation/modification des donnees d’un ResultSet

Olivier Caron 23 aout 2019 13/35

Page 33: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Parametrage de Statement (1/2)

• La methode generale de creation d’un Statement est :Statement createStatement(int resultSetType,

int resultSetConcurrency)

• Les valeurs possibles de resultSetType :

• ResultSet.Type FORWARD ONLY (par defaut) la lecture desdonnees issues de la requete ne pourra se faire que de la premiereligne vers la derniere. Les donnees sont celles de l’etat de la base aumoment de l’execution de la requete (pas de rafraıchissementpossible).

• ResultSet.Type SCROLL INSENSITIVE la lecture peut sefaire en avant et/ou arriere. Pas de rafraıchissement possible desdonnees.

• ResultSet.Type SCROLL SENSITIVE la lecture peut sefaire en avant et/ou arriere. Rafraıchissement possible des donnees.

Olivier Caron 23 aout 2019 14/35

Page 34: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Parametrage de Statement (1/2)

• La methode generale de creation d’un Statement est :Statement createStatement(int resultSetType,

int resultSetConcurrency)

• Les valeurs possibles de resultSetType :

• ResultSet.Type FORWARD ONLY (par defaut) la lecture desdonnees issues de la requete ne pourra se faire que de la premiereligne vers la derniere. Les donnees sont celles de l’etat de la base aumoment de l’execution de la requete (pas de rafraıchissementpossible).

• ResultSet.Type SCROLL INSENSITIVE la lecture peut sefaire en avant et/ou arriere. Pas de rafraıchissement possible desdonnees.

• ResultSet.Type SCROLL SENSITIVE la lecture peut sefaire en avant et/ou arriere. Rafraıchissement possible des donnees.

Olivier Caron 23 aout 2019 14/35

Page 35: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Parametrage de Statement (1/2)

• La methode generale de creation d’un Statement est :Statement createStatement(int resultSetType,

int resultSetConcurrency)

• Les valeurs possibles de resultSetType :• ResultSet.Type FORWARD ONLY (par defaut) la lecture des

donnees issues de la requete ne pourra se faire que de la premiereligne vers la derniere. Les donnees sont celles de l’etat de la base aumoment de l’execution de la requete (pas de rafraıchissementpossible).

• ResultSet.Type SCROLL INSENSITIVE la lecture peut sefaire en avant et/ou arriere. Pas de rafraıchissement possible desdonnees.

• ResultSet.Type SCROLL SENSITIVE la lecture peut sefaire en avant et/ou arriere. Rafraıchissement possible des donnees.

Olivier Caron 23 aout 2019 14/35

Page 36: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Parametrage de Statement (1/2)

• La methode generale de creation d’un Statement est :Statement createStatement(int resultSetType,

int resultSetConcurrency)

• Les valeurs possibles de resultSetType :• ResultSet.Type FORWARD ONLY (par defaut) la lecture des

donnees issues de la requete ne pourra se faire que de la premiereligne vers la derniere. Les donnees sont celles de l’etat de la base aumoment de l’execution de la requete (pas de rafraıchissementpossible).

• ResultSet.Type SCROLL INSENSITIVE la lecture peut sefaire en avant et/ou arriere. Pas de rafraıchissement possible desdonnees.

• ResultSet.Type SCROLL SENSITIVE la lecture peut sefaire en avant et/ou arriere. Rafraıchissement possible des donnees.

Olivier Caron 23 aout 2019 14/35

Page 37: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Parametrage de Statement (1/2)

• La methode generale de creation d’un Statement est :Statement createStatement(int resultSetType,

int resultSetConcurrency)

• Les valeurs possibles de resultSetType :• ResultSet.Type FORWARD ONLY (par defaut) la lecture des

donnees issues de la requete ne pourra se faire que de la premiereligne vers la derniere. Les donnees sont celles de l’etat de la base aumoment de l’execution de la requete (pas de rafraıchissementpossible).

• ResultSet.Type SCROLL INSENSITIVE la lecture peut sefaire en avant et/ou arriere. Pas de rafraıchissement possible desdonnees.

• ResultSet.Type SCROLL SENSITIVE la lecture peut sefaire en avant et/ou arriere. Rafraıchissement possible des donnees.

Olivier Caron 23 aout 2019 14/35

Page 38: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Parametrage de Statement (2/2)

• Les valeurs possibles de resultSetConcurrency :

• ResultSet.CONCUR READ ONLY (par defaut) les donnees duResultSet ne sont pas modifiables

• ResultSet.CONCUR UPDATABLE les donnees duResultSet sont modifiables et synchronisables avec la base.

• La methode stmt = session.createStatement() est un raccourcipour :stmt = session.createStatement(ResultSet.TYPE FORWARD ONLY,

ResultSet.CONCUR READ ONLY)

Olivier Caron 23 aout 2019 15/35

Page 39: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Parametrage de Statement (2/2)

• Les valeurs possibles de resultSetConcurrency :• ResultSet.CONCUR READ ONLY (par defaut) les donnees duResultSet ne sont pas modifiables

• ResultSet.CONCUR UPDATABLE les donnees duResultSet sont modifiables et synchronisables avec la base.

• La methode stmt = session.createStatement() est un raccourcipour :stmt = session.createStatement(ResultSet.TYPE FORWARD ONLY,

ResultSet.CONCUR READ ONLY)

Olivier Caron 23 aout 2019 15/35

Page 40: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Parametrage de Statement (2/2)

• Les valeurs possibles de resultSetConcurrency :• ResultSet.CONCUR READ ONLY (par defaut) les donnees duResultSet ne sont pas modifiables

• ResultSet.CONCUR UPDATABLE les donnees duResultSet sont modifiables et synchronisables avec la base.

• La methode stmt = session.createStatement() est un raccourcipour :stmt = session.createStatement(ResultSet.TYPE FORWARD ONLY,

ResultSet.CONCUR READ ONLY)

Olivier Caron 23 aout 2019 15/35

Page 41: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Parametrage de Statement (2/2)

• Les valeurs possibles de resultSetConcurrency :• ResultSet.CONCUR READ ONLY (par defaut) les donnees duResultSet ne sont pas modifiables

• ResultSet.CONCUR UPDATABLE les donnees duResultSet sont modifiables et synchronisables avec la base.

• La methode stmt = session.createStatement() est un raccourcipour :stmt = session.createStatement(ResultSet.TYPE FORWARD ONLY,

ResultSet.CONCUR READ ONLY)

Olivier Caron 23 aout 2019 15/35

Page 42: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Execution d’une requete select

• Utilisation de la methode executeQuery de la classeStatement.

Statement stmt = session . createStatement ( Resul tSet . TYPE SCROLL SENSITIVE ,Resul tSet .CONCUR UPDATABLE) ;

Resul tSet rs = stmt . executeQuery ( ” s e l e c t num, ch from t e s t e r ” ) ;

Olivier Caron 23 aout 2019 16/35

Page 43: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

L’objet de type ResultSet

BD

Rs:ResultSet

num ch

1 dupont

2 durant

cursor

Ligne 1

Ligne 2

updateRow

refreshRow

SynchronisationJava <-> BD

• Gestion d’un curseur pour parcourir les lignes resultats de la requete.

• Apres initialisation de l’objet, le curseur se trouve avant la premiereligne

Olivier Caron 23 aout 2019 17/35

Page 44: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

L’objet de type ResultSet

BD

Rs:ResultSet

num ch

1 dupont

2 durant

cursor

Ligne 1

Ligne 2

updateRow

refreshRow

SynchronisationJava <-> BD

• Gestion d’un curseur pour parcourir les lignes resultats de la requete.

• Apres initialisation de l’objet, le curseur se trouve avant la premiereligne

Olivier Caron 23 aout 2019 17/35

Page 45: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

ResultSet : gestion du curseur

• Plusieurs methodes booleennes pour deplacer le curseur

• Les methodes retournent false si operation impossible (ex : fin detable), la premiere ligne est la ligne 1.

methode actionnext() deplacement vers la ligne suivanteprevious() deplacement vers la ligne precedente

absolute(i) i > 0, aller a la ieme ligne

absolute(-i) i > 0, aller a la ieme ligne en partant de la derniererelative(i) descendre de i lignesrelative(-i) remonter de i lignesafterlast() aller en fin de la table (apres la derniere ligne)srs.isAfterLast() retourne vrai si fin de tablelast() aller a la derniere ligne

Olivier Caron 23 aout 2019 18/35

Page 46: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

ResultSet : gestion du curseur

• Plusieurs methodes booleennes pour deplacer le curseur• Les methodes retournent false si operation impossible (ex : fin de

table), la premiere ligne est la ligne 1.methode actionnext() deplacement vers la ligne suivanteprevious() deplacement vers la ligne precedente

absolute(i) i > 0, aller a la ieme ligne

absolute(-i) i > 0, aller a la ieme ligne en partant de la derniererelative(i) descendre de i lignesrelative(-i) remonter de i lignesafterlast() aller en fin de la table (apres la derniere ligne)srs.isAfterLast() retourne vrai si fin de tablelast() aller a la derniere ligne

Olivier Caron 23 aout 2019 18/35

Page 47: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

ResultSet : lecture des lignes

• Plusieurs methodes pour lire les donnees de la ligne courante (cellepointee par le curseur)

• Deux modes : n◦ de colonne (indicee a partir de 1) ou nom de colonnemethode actionDate getDate(int i) retourne l’objet Date de la colonne iDate getDate(String col) retourne l’objet Date de la colonne colint getInt(int i) retourne un entier de la colonne iint getInt(String col) retourne un entier de la colonne colString getString(int i) retourne l’objet String de la colonne iString getString(String col) retourne l’objet String de la colonne col. . . . . .

Olivier Caron 23 aout 2019 19/35

Page 48: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

ResultSet : lecture des lignes

• Plusieurs methodes pour lire les donnees de la ligne courante (cellepointee par le curseur)

• Deux modes : n◦ de colonne (indicee a partir de 1) ou nom de colonnemethode actionDate getDate(int i) retourne l’objet Date de la colonne iDate getDate(String col) retourne l’objet Date de la colonne colint getInt(int i) retourne un entier de la colonne iint getInt(String col) retourne un entier de la colonne colString getString(int i) retourne l’objet String de la colonne iString getString(String col) retourne l’objet String de la colonne col. . . . . .

Olivier Caron 23 aout 2019 19/35

Page 49: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Exemple de consultation

i n t i = 1 ;while ( rs . next ( ) ) {

i n t num = rs . g e t I n t ( ”num” ) ;S t r i n g ch = rs . g e t S t r i n g ( ” ch ” ) ;System . out . p r i n t l n ( ” l i g n e ” + i + ” : ” +

num + ” , ” + ch ) ;i ++;

}

• next() est obligatoire meme pour lire une seule ligne (ex : count)

• En mode FORWARD ONLY, next() est la seule methodepossible.

Olivier Caron 23 aout 2019 20/35

Page 50: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

ResultSet : modification de lignes

• Des nouvelles methodes pour ResultSet :void updateType(String nomColonne, typenouvelleValeur)void updateRow() , void refreshRow()void cancelRowUpdates()• Un exemple :

rs . f i r s t ( ) ; / / premie re l i g n ers . refreshRow ( ) ; / / synchron isa t ion BD −> Javars . updateSt r ing ( ” ch ” , ” dubois ” ) ;rs . updateRow ( ) ; / / synchron isa t ion Java −> BDrs . updateSt r ing ( ” ch ” , ” Caron ” ) ;rs . cancelRowUpdates ( ) ; / / pr ecedente l i g n e i n v a l i d ee

Olivier Caron 23 aout 2019 21/35

Page 51: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

ResultSet : insertion de lignes

• Des nouvelles methodes pour ResultSet :void moveToInsertRow()void moveToCurrentRow()void insertRow()

• Un exemple :

/ / phase d ’ i n s e r t i o nrs . moveToInsertRow ( ) ;rs . update In t ( ”num” ,3 ) ;rs . updateSt r ing ( ” ch ” , ” ga rc ia ” ) ;rs . insertRow ( ) ; / / synchron isa t ion Java −> BDrs . moveToCurrentRow ( ) ; / / r e t o u r au curseur avant i n s e r t i o n

Olivier Caron 23 aout 2019 22/35

Page 52: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Preparation des requetes

• Lorsqu’elles sont executees plusieurs fois

• Les SGBD ont une version compilee de la requete (performances)

• depend des SGBD

• JDBC offre une API pour :

• Preparer une requete• Parametrer une requete

Olivier Caron 23 aout 2019 23/35

Page 53: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Preparation des requetes

• Lorsqu’elles sont executees plusieurs fois• Les SGBD ont une version compilee de la requete (performances)

• depend des SGBD

• JDBC offre une API pour :

• Preparer une requete• Parametrer une requete

Olivier Caron 23 aout 2019 23/35

Page 54: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Preparation des requetes

• Lorsqu’elles sont executees plusieurs fois• Les SGBD ont une version compilee de la requete (performances)

• depend des SGBD

• JDBC offre une API pour :

• Preparer une requete• Parametrer une requete

Olivier Caron 23 aout 2019 23/35

Page 55: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Preparation des requetes

• Lorsqu’elles sont executees plusieurs fois• Les SGBD ont une version compilee de la requete (performances)

• depend des SGBD

• JDBC offre une API pour :

• Preparer une requete• Parametrer une requete

Olivier Caron 23 aout 2019 23/35

Page 56: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Preparation des requetes

• Lorsqu’elles sont executees plusieurs fois• Les SGBD ont une version compilee de la requete (performances)

• depend des SGBD

• JDBC offre une API pour :• Preparer une requete

• Parametrer une requete

Olivier Caron 23 aout 2019 23/35

Page 57: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Preparation des requetes

• Lorsqu’elles sont executees plusieurs fois• Les SGBD ont une version compilee de la requete (performances)

• depend des SGBD

• JDBC offre une API pour :• Preparer une requete• Parametrer une requete

Olivier Caron 23 aout 2019 23/35

Page 58: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

L’interface PreparedStatement

• Creation d’une requete preparee :

PreparedStatement req = session . prepareStatement (” s e l e c t ∗ from t e s t e r where num=? and ch =? ” ) ;

• Parametrer la requete :

req . s e t I n t (1 , 3) ; req . s e t S t r i n g (2 , ” garc ia ” ) ;

• Execution de la requete :

Resul tSet rs2 = req . executeQuery ( ) ;

Olivier Caron 23 aout 2019 24/35

Page 59: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Fermeture de la connexion

• Fermer le dialogue SQL

• Fermer la session avec la base

stmt . c lose ( ) ;connect . c lose ( ) ;

Olivier Caron 23 aout 2019 25/35

Page 60: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Les objets RowSet : extension de ResultSet

• JDBC 4 : fusion de Connection, PreparedStatement etResultSet

• Integre mecanisme d’observation des donnees modifiees.

Olivier Caron 23 aout 2019 26/35

Page 61: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Les objets RowSet : extension de ResultSet

• JDBC 4 : fusion de Connection, PreparedStatement etResultSet• Integre mecanisme d’observation des donnees modifiees.

Olivier Caron 23 aout 2019 26/35

Page 62: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Exemple RowSet

JdbcRowSet j r s = RowSetProvider . newFactory ( ) . createJdbcRowSet ( ) ;/∗ Connexion base d i s t a n t e : ∗ /j r s . s e t U r l ( u r l ) ;j r s . setUsername ( user ) ;j r s . setPassword ( password ) ;/∗ e tab l i ssement reque te ( PreparedStatement ) : ∗ /j r s . setCommand ( ”SELECT ∗ FROM t e s t e r WHERE ch= ? ” ) ;j r s . s e t S t r i n g (1 , ” ga rc ia ” ) ;/∗ execu t i on reque te ( e q u i v a l e n t a executeQuery ) : ∗ /j r s . execute ( ) ;while ( j r s . next ( ) ) . . .

Olivier Caron 23 aout 2019 27/35

Page 63: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Gestion des transactions

• Le mode par defaut est ”auto-commit” : chaque requete SQL formeune transaction

• Initier une transaction, choix du mode d’isolation standard :

session . setAutoCommit ( fa lse ) ;session . s e t T r a n s a c t i o n I s o l a t i o n ( Connection . TRANSACTION SERIALIZABLE) ;

• Valider une transaction :

stmt . executeUpdate ( ” de le te from emprunter where numl=2 ” ) ;stmt . executeUpdate ( ” de le te from reserver where numl=2 ” ) ;stmt . executeUpdate ( ” de le te from l i v r e s where numl=2 ” ) ;session . commit ( ) ;session . setAutoCommit ( true ) ;

Olivier Caron 23 aout 2019 28/35

Page 64: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Annuler une transaction

• methode rollback()

t ry {session . setAutoCommit ( fa lse ) ; / / debut t r a n s a c t i o nsession . s e t T r a n s a c t i o n I s o l a t i o n ( Connection .TRANSACTION READ COMMITTED) ;cmdeSQL= ” i n s e r t i n t o emprunter values ( ” +numl+ ” , ” +numu+ ” ) ” ;stmt . executeUpdate (cmdeSQL) ;i f ( nbEmprunts >= 3) connect . r o l l b a c k ( ) ;else session . commit ( ) ; / / f i n t r a n s a c t i o nsession . setAutoCommit ( true ) ;} catch ( SQLException e ) {

i f ( session != nul l ) {t ry { session . r o l l b a c k ( ) ; session . setAutoCommit ( true ) ;} catch ( SQLException ex ) {System . e r r . p r i n t l n ( ” on est mal ! ” ) ;

}}

Olivier Caron 23 aout 2019 29/35

Page 65: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Prise en compte de SQL 3

• SQL 3 : unification de concepts oriente-objet et le monde relationnel

• Des colonnes de type non simple :

• Des tableaux (rs.getArray("nomColonne"))• Des objets (rs.getBlob("nomColonne"))

Olivier Caron 23 aout 2019 30/35

Page 66: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Prise en compte de SQL 3

• SQL 3 : unification de concepts oriente-objet et le monde relationnel• Des colonnes de type non simple :

• Des tableaux (rs.getArray("nomColonne"))• Des objets (rs.getBlob("nomColonne"))

Olivier Caron 23 aout 2019 30/35

Page 67: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Prise en compte de SQL 3

• SQL 3 : unification de concepts oriente-objet et le monde relationnel• Des colonnes de type non simple :

• Des tableaux (rs.getArray("nomColonne"))

• Des objets (rs.getBlob("nomColonne"))

Olivier Caron 23 aout 2019 30/35

Page 68: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Prise en compte de SQL 3

• SQL 3 : unification de concepts oriente-objet et le monde relationnel• Des colonnes de type non simple :

• Des tableaux (rs.getArray("nomColonne"))• Des objets (rs.getBlob("nomColonne"))

Olivier Caron 23 aout 2019 30/35

Page 69: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Le niveau Meta

Une meta-donnee est une donnee qui decrit une donnee

• Des Exemples :

• Modele Relationnel : table(colonne1 type1, . . . )• Postgres pg database, pg user, pg class,. . .• Java : getClass() , getMethods, getFields(), . . .

• JDBC propose une API pour analyser une base (introspection)

Olivier Caron 23 aout 2019 31/35

Page 70: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Le niveau Meta

Une meta-donnee est une donnee qui decrit une donnee

• Des Exemples :• Modele Relationnel : table(colonne1 type1, . . . )

• Postgres pg database, pg user, pg class,. . .• Java : getClass() , getMethods, getFields(), . . .

• JDBC propose une API pour analyser une base (introspection)

Olivier Caron 23 aout 2019 31/35

Page 71: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Le niveau Meta

Une meta-donnee est une donnee qui decrit une donnee

• Des Exemples :• Modele Relationnel : table(colonne1 type1, . . . )• Postgres pg database, pg user, pg class,. . .

• Java : getClass() , getMethods, getFields(), . . .

• JDBC propose une API pour analyser une base (introspection)

Olivier Caron 23 aout 2019 31/35

Page 72: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Le niveau Meta

Une meta-donnee est une donnee qui decrit une donnee

• Des Exemples :• Modele Relationnel : table(colonne1 type1, . . . )• Postgres pg database, pg user, pg class,. . .• Java : getClass() , getMethods, getFields(), . . .

• JDBC propose une API pour analyser une base (introspection)

Olivier Caron 23 aout 2019 31/35

Page 73: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Le niveau Meta

Une meta-donnee est une donnee qui decrit une donnee

• Des Exemples :• Modele Relationnel : table(colonne1 type1, . . . )• Postgres pg database, pg user, pg class,. . .• Java : getClass() , getMethods, getFields(), . . .

• JDBC propose une API pour analyser une base (introspection)

Olivier Caron 23 aout 2019 31/35

Page 74: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

JDBC et le niveau Meta

• Analyser dynamiquement la structure d’une table resultatl’interface ResultSetMetaData

int getColumnCount() le nombre de colonnesint getColumnDisplaySize(int column) taille d’affichage d’une colString getColumnLabel(int column) nom suggere d’une colonneString getColumnName(int column) nom de colonneint getColumnType(int column) type (cste) de la colonneString getColumnTypeName(int column) nom du type de la colonne

Olivier Caron 23 aout 2019 32/35

Page 75: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Un exemple d’analyse dynamique de table

rs = stmt . executeQuery ( uneRequeteSQL ) ;rs . l a s t ( ) ; i n t nbLignes = rs . getRow ( ) ; rs . b e f o r e F i r s t ( ) ;ResultSetMetaData rsmd = rs . getMetaData ( ) ;S t r i n g colName [ ] = new S t r i n g [ rsmd . getColumnCount ( ) ] ;for ( i n t i =0; i<rsmd . getColumnCount ( ) ; i ++) { / / ges t ion des noms de co l

colName [ i ]= rsmd . getColumnLabel ( i +1 ) ;Object r e s u l t a t [ ] [ ] = new Object [ rsmd . getColumnCount ( ) ] [ nbLignes ] ;i n t l i g =0 ;while ( rs . next ( ) ) {

for ( i n t i =0; i<colName . leng th ; i ++)switch ( rsmd . getColumnType ( i +1) ) {

case Types . INTEGER: r e s u l t a t [ i ] [ l i g ]=new I n t ege r ( rs . g e t I n t ( colName [ i ] ) ) ;break ;

case Types .VARCHAR: r e s u l t a t [ i ] [ l i g ]=new S t r i n g ( rs . g e t S t r i n g ( colName [ i ] ) ) ;break ;. . .

}}

Olivier Caron 23 aout 2019 33/35

Page 76: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Analyse dynamique de la base

• L’interface DatabaseMetaData

• API tres riche (et donc complexe)• Permet de connaıtre les possibilites du SGBD• Portable (de nombreux outils generiques)

• Permet de developper des outils generiques (aka PhpMyAdmin)

Olivier Caron 23 aout 2019 34/35

Page 77: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Analyse dynamique de la base

• L’interface DatabaseMetaData• API tres riche (et donc complexe)

• Permet de connaıtre les possibilites du SGBD• Portable (de nombreux outils generiques)

• Permet de developper des outils generiques (aka PhpMyAdmin)

Olivier Caron 23 aout 2019 34/35

Page 78: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Analyse dynamique de la base

• L’interface DatabaseMetaData• API tres riche (et donc complexe)• Permet de connaıtre les possibilites du SGBD

• Portable (de nombreux outils generiques)

• Permet de developper des outils generiques (aka PhpMyAdmin)

Olivier Caron 23 aout 2019 34/35

Page 79: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Analyse dynamique de la base

• L’interface DatabaseMetaData• API tres riche (et donc complexe)• Permet de connaıtre les possibilites du SGBD• Portable (de nombreux outils generiques)

• Permet de developper des outils generiques (aka PhpMyAdmin)

Olivier Caron 23 aout 2019 34/35

Page 80: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Analyse dynamique de la base

• L’interface DatabaseMetaData• API tres riche (et donc complexe)• Permet de connaıtre les possibilites du SGBD• Portable (de nombreux outils generiques)

• Permet de developper des outils generiques (aka PhpMyAdmin)

Olivier Caron 23 aout 2019 34/35

Page 81: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Conclusion

• API tres riche, une petite partie de JDBC est presentee dans cecours.

• Une API unique quelque soit le SGBD

• En constante evolution : gestion de ”row sets”, gestion de blobs,support de SQL XML, programmation par annotations Java, . . . ,

Olivier Caron 23 aout 2019 35/35

Page 82: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Conclusion

• API tres riche, une petite partie de JDBC est presentee dans cecours.

• Une API unique quelque soit le SGBD

• En constante evolution : gestion de ”row sets”, gestion de blobs,support de SQL XML, programmation par annotations Java, . . . ,

Olivier Caron 23 aout 2019 35/35

Page 83: Le protocole JDBC (Java DataBase Connectivity)ocaron.plil.fr/enseignement/bd_gis2a/coursJDBC.pdf · JDBC Langage Java (multi-plateforme :-) Interface de programmation (API)1 Adopte

GIS 2ABases de donnees

Avancees

Conclusion

• API tres riche, une petite partie de JDBC est presentee dans cecours.

• Une API unique quelque soit le SGBD

• En constante evolution : gestion de ”row sets”, gestion de blobs,support de SQL XML, programmation par annotations Java, . . . ,

Olivier Caron 23 aout 2019 35/35