Introduction à JDBC
H.Zinsou
Introduction à JDBC.doc___________________________________________________________________________________________
Introduction à JDBC
2. LA CONNEXION .....................................................................................................4
4. CONTROLE DE L'EXECUTION..............................................................................8
_________________________________________________________________________ 1
Page INJD.11
Accès aux bases de données
Introduction à JDBC
H.Zinsou
Introduction à JDBC.doc___________________________________________________________________________________________
JDBC
la plus ancienne et actuellement la plus utilisée
basée comme ODBC sur la norme CLI (Call level interface)
SQLJ
l'application à java de l'embedded SQL
norme implémentée par Oracle et IBM-DB2
JDO
la plus récente
non limitée aux bases relationnelles
Driver , Connection
les exceptions
Packages
d’implémentatio XxxDriver
n:
createStatement( )
executeQuery( )
_________________________________________________________________________ 2
Page INJD.21 ResultSet
2. La connexion
ponts jdbc-odbc
protocole NetServeur
du SGBD
On utilise ici les drivers "tout java" Serveur de données
éléments:
classes JDBC
_________________________________________________________________________ 3
Page INJD.31 application
Client
Accès aux bases de données
Introduction à JDBC
H.Zinsou
Introduction à JDBC.doc___________________________________________________________________________________________
- connexion socket
et pour mySql
set classpath = c:\mySql\ mysql-connector-java-3.0.9-stable-bin.jar;%classpath%
Exemple d'utilisation
try {
// chargement du driver
Class.forName ("oracle.jdbc.driver.OracleDriver");
...
// connexion à la base
Connection cnx = DriverManager.getConnection
("jdbc:oracle:thin:scott/tiger@serveur:1521:instance");
...
// création de la requête
Statement stmt = cnx.createStatement ();
...
// exécution de la requête
stmt.executeUpdate
("create table Test(numero number(4))");
// traitement des exceptions retournées par le serveur
} catch (SQLException e) {
System.out.println
("erreur accès base: " + e + " " + e.getMessage());
}
_________________________________________________________________________ 5
Page INJD.51
Accès aux bases de données
Introduction à JDBC
H.Zinsou
Introduction à JDBC.doc___________________________________________________________________________________________
but:
optimisation des accès à la base, en évitant de recompiler (parsing) les requêtes SQL à chaqu
exécution
moyen.
On remplace la classe Statement par la classe PreparedStatement
PreparedStatement
Connection
clearParameters()
prepareStatement(): PreparedStatement
setShort(int rangParam, short x)
setString(int rangParam, Stringx)
...
executeQuery(Stringsql): ResultSet
executeUpdate(Stringsql): int rowCount
ResultSet
next(): booleanexiste
getString(): Stringdonnée
getInt(): int donnée
getDate(): Datedonnée
3. exécution du preparedStatement
ResultSet result = pStmt.executeQuery();
while(result.next()) {
// exploitation du résultat
System.out.println (result.getString(1) ; ...
_________________________________________________________________________ 6
Page INJD.61
Accès aux bases de données
Introduction à JDBC
H.Zinsou
Introduction à JDBC.doc___________________________________________________________________________________________
Exemple InsertSelect2
try {
String requete= "insert into livre (?, ?) values ('?, ?";
PreparedStatement pStmt = cnx.prepareStatement(requete);
pStmt.setString ...
pStmt.executeUpdate();
}
catch(SQLException ex) {
System.out.println (ex.getMessage() );
}
une commande SQL insert / update / delete peut ne modifier aucune ligne de la table
le serveur ne retourne pas d'exception dans ce cas
on peut vouloir vérifier combien de lignes ont étyé modifiées:
Les principes
dans une base relationnelle, n'importe quelle cellule d'une table peut avoir une valeur nulle
en SQL, une valeur nulle est testée par where une_colonne is null
dans JDBC, la valeur relationnelle NULL est identifiée par java.sql.TYPES.NULL
avec java, n'importe quel pointeur vers un objet peut être nul
par contre un type primitif (int, float, boolean…) ne peut pas être nul
on peut cependant leur affecter des valeurs spéciales (Integer.MIN_VALUE,
Float.NEGATIVE_INFINITY)
int numero = 0;
ResultSet rs = statement.executeQuery("select empno, ename from emp");
while (rs.next()) {
numero = rs.getInt(1);
if (rs.wasNull()) numero = Integer.MIN_VALUE;
}
et en insertion
int numero = …
…
PreparedStatement ps = connecion.prepareStatement("insert into emp (empno, ename) values
(?, ?)");
ps.setInt(1, java.sql.TYPES.NULL);
===========================
_________________________________________________________________________ 8
Page INJD.81