Académique Documents
Professionnel Documents
Culture Documents
Lefdaoui
Accs JDBC
Plan du cours
Principes
Architecture Pilotes JDBC Mise en uvre d une application Java-JDBC Accs aux mta-donnes
Pr Y.Lefdaoui
Accs JDBC
Principes de JDBC
Dfinir des donnes Rechercher des donnes Manipuler des donnes
applets Java
Pr Y.Lefdaoui
Accs JDBC
HTTP
SQL
PL/SQL
Net8
CLIENT LOURD J Application D Java B C
Pr Y.Lefdaoui Accs JDBC
Procdures Java
Net8
Net8 L application ncessite un poste de travail dit client lourd : elle ralise la fois des oprations sur les donnes et l affichage de ces donnes.
serveur dapplications par le protocole HTTP Le client ne ralise aucun traitement sur les donnes Le serveur d applications recueille les donnes par une connexion JDBC, puis les traite et transmet le rsultat au client lger.
Pr Y.Lefdaoui Accs JDBC 5
faciliter l accs aux donnes contenues dans une BDR. JDBC permet :
une connexion simultane plusieurs BD la gestion des transactions l interrogation l appel des procdures stockes
Il existe trois types de pilotes JDBC : ceux qui rutilisent ODBC ceux qui se rfrent Net8 ceux qui n ont besoin ni de Net8 ni de ODBC
Pr Y.Lefdaoui Accs JDBC 6
Programmes Java
Oracle Net8
Rseau TCP/IP
Rseau vers le serveur Oracle 8i
Pr Y.Lefdaoui Accs JDBC 7
les charges importantes Il est prconis pour des applications utilisant un serveur dapplications. Les applications sollicitant bcp la BD
Pr Y.Lefdaoui
Accs JDBC
Java Le code pilote mule net8 Inconvnients : obligation de tlcharger 300Ko hors application Java
Pr Y.Lefdaoui
Accs JDBC
Pr Y.Lefdaoui
Accs JDBC
10
// charger d abord les pilotes jdbc Class.forName( oracle.jdbc.driver.OracleDriver ); Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // on peut aussi utiliser DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
certains compilateurs refusent cette notation et demande plutt :
Class.forName("driver_name").newInstance();
Pr Y.Lefdaoui
Accs JDBC
11
URL de connexion
Il faut spcifier dans lURL :
l utilisation de JDBC le driver ou le type de SGBDR l identification de la base locale ou distante avec
Connexion la base
On utilise la mthode getConnection() de DriverManager le DriverManager essaye tous les drivers qui se sont enregistrs
(chargement en mmoire avec Class.forName()) jusqu ce quil trouve un driver qui peut se connecter la base
Exemple
Pr Y.Lefdaoui
Accs JDBC
13
Cration d un statement
L objet Statement possde les mthodes ncessaires pour raliser les
Pr Y.Lefdaoui
Accs JDBC
14
retournent un ResultSet (tuples rsultants) executeUpdate(String) : pour les requtes (INSERT, UPDATE, DELETE, CREATE TABLE, DROP TABLE) qui retournent un entier (nombre de tuples traits) execute() : procdures stockes
Exemple
Statement st = connexion.createStatement(); ResultSet rs = st.executeQuery("SELECT ename, job FROM emp " + "WHERE empno=7188 ORDER BY ename"); int nb=st.executeUpdate("INSERT INTO dept(DEPT)" + VALUES(06));
Accs JDBC
Pr Y.Lefdaoui
15
les types des colonnes impliques dans la requte puis un 2me pour l excuter..
Pr Y.Lefdaoui
Accs JDBC
16
mmoire par le driver JDBC ; il faut donc les lire "manuellement" et les stocker dans des variables pour un usage ultrieur
Pr Y.Lefdaoui
Accs JDBC
17
ResultSet
Il se parcourt itrativement ligne par ligne avec la
mthode next()
retourne false si dernier tuple lu, true sinon chaque appel fait avancer le curseur sur le tuple suivant initialement, le curseur est positionn avant le premier
tuple, il faut donc excuter next() au moins une fois pour avoir le premier impossible de revenir au tuple prcdent ou de parcourir l ensemble dans un ordre alatoire
Les colonnes sont rfrences par leur numro ou par leur nom
L accs aux valeurs des colonnes se fait par les mthodes de la forme
getXXX()
Pr Y.Lefdaoui
Accs JDBC
18
ResultSet
int val = rs.getInt(3) ; // accs la 3e colonne String prod = rs.getString("PRODUIT") ; Statement st = connection.createStatement(); ResultSet rs = st.executeQuery( "SELECT a, b, c, FROM Table1"); while(rs.next()) { int i = rs.getInt("a"); String s = rs.getString("b"); byte[] b = rs.getBytes("c");
Pr Y.Lefdaoui
Accs JDBC
19
Pr Y.Lefdaoui
Accs JDBC
20
Pr Y.Lefdaoui
Accs JDBC
21
wasNull() de ResultSet, qui renvoie true si l on vient de lire un NULL, false sinon
getObject() et getDate() ) retournent un "null " Java les mthodes numriques (getByte() , getInt() , etc) retournent "0" getBoolean() retourne " false "
Pr Y.Lefdaoui
Accs JDBC
22
diffrents espaces ouverts (sinon le garbage collector s en occupera mais cest moins efficace)
Chaque objet possde une mthode close() :
Pr Y.Lefdaoui
Accs JDBC
23
class JDBCThinGetDeptScott { public static void main (String args []) throws SQLException, ClassNotFoundException, java.io.IOException {
le nombre de colonne : getColumnCount() le nom d une colonne : getColumnName(int col) le type d une colonne : getColumnType(int col) le nom de la table : getTableName(int col) si un NULL SQL peut tre stock dans une colonne : isNullable()
Pr Y.Lefdaoui
Accs JDBC
26
ResultSetMetaData
Exemple
Resultset rs = stmt.executeQuery ("SELECT * FROM emp"); ResultSetMetaData rsmd = rs.getMetaData(); int nbColonnes = rsmd.getColumnCount(); for(int i = 1; i <= nbColonnes; i++) {
Pr Y.Lefdaoui
Accs JDBC
27
DataBaseMetaData
Pour rcuprer des informations sur la base de donnes elle-mme,
Pr Y.Lefdaoui
Accs JDBC
28
Requtes prcompiles
L objet PreparedStatement envoie une requte sans paramtres
la base de donnes pour pr-compilation et spcifiera le moment voulu la valeur des paramtres
plus rapide qu un Statement classique
d une stratgie d excution adquate) pour de nombreuses excutions d une mme requte SQL avec des paramtres variables
tous les SGBD nacceptent pas les requtes pr-compiles
Pr Y.Lefdaoui
Accs JDBC
29
Requtes prcompiles
La mthode prepareStatement() de l objet Connection cre un
PreparedStatement :
positionns par les mthodes setString() , setInt(), setDate() , de PreparedStatement (setNull() positionne le paramtre NULL)
Pr Y.Lefdaoui
Accs JDBC
30
Pr Y.Lefdaoui
Accs JDBC
31
Exceptions
SQLException est leve ds qu une connexion ou un ordre SQL ne
base comme :
Pr Y.Lefdaoui
Accs JDBC
32
uneConnection.commit();
uneConnection.rollback();
Accs JDBC
Pr Y.Lefdaoui
33
Performances de JDBC
Quelques limitations :
chaque ligne retourne impossible de ne faire quun accs la base pour obtenir lensemble des lignes rsultats impossible de revenir en arrire dans le ResultSet -> pnalisant si lutilisateur veut naviguer dans les lignes JDBC effectue 2 accs la base par dfaut :
pour dterminer le type des valeurs de retour puis pour rcuprer les valeurs
Pr Y.Lefdaoui
Accs JDBC
34