Création d’une requête
Il y a deux types de requête
Iles requêtes d’interrogation, consultation qui renvoient un résultat ; et
Iles requêtes de modification
Les requêtes de consultation comme les requêtes de modification seront
véhiculées par une instance de la classe Statement.
Statement st mt = connexion . c r e ateS tatem ent ( )
Une requête est créée par la méthode createStatement() de la
classe Connection . Il n’y a qu’une seule instance de la classe
Statement par instance de la classe Connection.
(IUT Béthune — Département R & T) Le SQL intégré Base de Données (IC5) — 07/08 9 / 29
Création d’une requête
On utilise l’instance de la classe Statement pour indiquer le code que l’on
veut exécuter.
Suivant le type de requête :
IModification :
stm t . executeUpdate ( "CREATE TABLE agenda " +
" (nom v ar c ha r ( 2 0 ) , prenom va r ch ar ( 2 0 ) , " +
" ad ress e v a rc h ar ( 5 0 ) , t e l ch ar ( 1 2 ) " ) ;
IConsultation
stm t . executeQuery ( "SELECT ∗FROM agenda " ) ;
Contrairement aux requêtes de modification, les requêtes de consultation
ont besoin d’accéder au résultat de la requête.
(IUT Béthune — Département R & T) Le SQL intégré Base de Données (IC5) — 07/08 10 / 29
Traitement d’une requête
Le résultat de la requête est affecté à une instance de la classe
ResultSet.
R e su l t Se t r s = s t m t . ex ec ute Quer y ( " S e l e c t ∗from c l i e n t ; " ) ;
L’instance de la classe ResultSet contient la table résultat de la
requête.
Pour récupérer les données dans l’instance, on utilise un pointeur sur une
ligne courante et les méthodes du tableau.
Voir la documentation Java pour avoir l’ensemble des méthodes
disponibles.
int getInt(int i) int getInt(String
nomCol)
Renvoie l’entier stocké dans la ième colonne ou la co-
lonne de nom nomCol
String getString(int i) String getString(String
nomCol)
Renvoie la chaîne de caractères stockée dans la ième
colonne ou la colonne de nom nomCol
Date getDate(int i) Date getDate(String
nomCol)
Renvoie la date stockée dans la ième colonne ou la
colonne de nom nomCol
boolean next() Renvoie vrai si il y a encore une ligne à traiter, faux
sinon. Elle fait passer aussi d’une ligne à la ligne sui-
vante
boolean first() Place le curseur sur la première ligne
(IUT Béthune — Département R & T) Le SQL intégré Base de Données (IC5) — 07/08 11 / 29
Clôture de la connexion
On utilise la méthode close() de la classe Connection.
connexion . c l o s e ( ) ;
(IUT Béthune — Département R & T) Le SQL intégré Base de Données (IC5) — 07/08 12 / 29
Un exemple complet
import j av a . i o . ∗;
import j a va . s q l . ∗;
pub lic cl a ss TestJDBC {
private Conne ction con nexion ;
pub lic TestJDBC ( ) {
t r y {
C la s s . forNa me ( " o rg . p o s t g r e s q l . D r i v e r " ) ;
}catch ( Cl as sN otFound Ex ception e ) {
System . e r r . p r i n t l n ( " P i l o t e d ’ acces
p o s t g r e s q l i n t r o u v a b l e ( " + e . t o S t r i n g ( ) + " ) " ) ;
}
}
p ub l ic s t a t i c v oi d main ( S t r i n g [ ] a rgs ) {
TestJDBC i n s t a n c e = new TestJDBC ( ) ;
i n s t a n c e . o uv reConnexion ( " j d b c : p o s t g r e s q l : / / l o c a l h o s t / agenda " ,
" d uchm ol " , " s e c r e t " ) ;
i n st a nc e . t r a i t e m e n t ( ) ;
i n s t a n c e . fermeC o nn ex ion ( ) ;
}
}
(IUT Béthune — Département R & T) Le SQL intégré Base de Données (IC5) — 07/08 13 / 29
Un exemple complet
pub lic void o uv re Connexion ( S t r i n g u r l , S t r i n g u se r , S t r i n g password ) {
t r y {
co nn exi on = D ri ve rM ana ge r . g e tC o nne cti on ( u r l , u se r , p asswo rd ) ;
System . o ut . p r i n t l n ( " Connecte a l a base de donnees URL = " + u r l ) ;
}catch ( SQLException e ) {
System . o ut . p r i n t l n ( " E xce pti on : o u ve rt ur e ( " + e . t o S t r i n g ( ) + " ) " ) ;
}
}
pub lic void fermeConnexion ( ) {
t r y {
conne x ion . cl os e ( ) ;
}catch ( SQLException e ) {
System . o ut . p r i n t l n ( " E xce pti on : f er me tu re ( " + e . t o S t r i n g ( ) + " ) " ) ;
}
}
(IUT Béthune — Département R & T) Le SQL intégré Base de Données (IC5) — 07/08 14 / 29
Un exemple complet
public void t r a i t e m e n t ( ) {
Stat e ment s t m t = n u l l ;
R e s ul t S e t r s ;
t r y {
stmt = conne xion . c r e a t e S t at e m en t ( ) ;
s tmt . e xe cu te U pd at e ( " d r op t a b l e telep ho n e " ) ;
}catch ( SQLException e ) { }
t r y {
s tmt . e xe cu te U pd at e ( " c r e at e t a b l e t e le p h on e ( " +
" nom v a r ch a r ( 2 5 ) NOT NULL , " +
" pr enom v a r ch a r ( 2 5 ) NOT NULL , " +
" t e l e ph o n e v a r c h a r ( 1 5 ) NOT NULL ) " ) ;
s tm t . e xecut eU pdate ( " i n s e r t i n t o t elephone " +
" values ( ’ M ar tin ’ , ’ Robe r t ’ , ’00 00 00 00 0 0 ’ ) " ) ;
s tm t . e xecut eU pdate ( " i n s e r t i n t o t elephone " +
" values ( ’ Durant ’ , ’ Ge rard ’ , ’00 00 00 00 0 0 ’ ) " ) ;
r s = s t mt . e xe cu te Que ry ( " s e l e c t ∗fro m t e le p ho ne o rde r b y nom, prenom " ) ;
while ( r s . n ex t ( ) ) {
Sy stem . o u t . p r i n t l n ( "Nom : \ t " + r s . g e t S t r i n g ( " nom" ) ) ;
Sy stem . o u t . p r i n t l n ( " Pren om : \ t " + r s . g e t S t r i n g ( 2 ) ) ;
Sy stem . o u t . p r i n t l n ( " t e l ep h one : \ t " + r s . g e t S t r i n g ( " t el e p ho n e " ) + " \ n " ) ;
}
stmt . c lose ( ) ;
}catch ( SQLException e ) {
Syste m . e r r . p r i n t l n ( " e r r e ur e x ec u t io n r equete SQL " + e . t o S t r i n g ( ) ) ;
System . e x i t ( 1 ) ;
}
}
(IUT Béthune — Département R & T) Le SQL intégré Base de Données (IC5) — 07/08 15 / 29
Résultat d’exécution
[ . . . ] ja va c TestJDBC . ja va
[ . . . ] Java −c l as s pa t h . : / u s r / share / l i b / pg s ql / j db c7 .1 −1. 2 . j a r TestJDBC
Con ne ct e a l a ba se de don nees URL = j d b c : p o s t g r e s q l : / / l o c a l h o s t / d uchmol
Nom : Dura nt
Prenom : Gerard
te lep ho ne : 00 00 00 00 00
Nom : M a rt i n
Prenom : R obert
te lep ho ne : 00 00 00 00 00
(IUT Béthune — Département R & T) Le SQL intégré Base de Données (IC5) — 07/08 16 / 29