JDBC
JDBC
JDBC
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
ii
1.2 Architecture
Application java Applet Java
JDBC
dans
Attention ! Le driver doit se trouver dans le CLASSPATH ; sil sagit dun chier jar, le chier lui mme doit tre dans le classpath :
export CLASSPATH=.:/home/titi/postgresql.jar:/usr/local/jdk1.2
1.4.1 Exemple :
try { Connection db; String url= "jdbc:postgresql://localhost/guest"; db= DriverManager.getConnection(url, "guest", "toto"); // manipulations diverses : .... // on a fini : db.close(); } catch (SQLException e) { }
ladresse est ici compose du nom du serveur postgres (localhost) suivi du nom de la base de donne (ici, guest ; lIUT ce sera votre nom de login).
Notes : on peut avoir plusieurs requtes ouvertes sur la mme connexion ; il nest possible daccder un champ quune fois et une seule ; il est ncessaire de fermer (close) les Statement et les ResultSet.
1.5.1 Mthodes
ResultSet executeQuery (String requete) throws SQLException Envoie une requte SQL, (normalement de type select ), et renvoie le rsultat sous forme dun ResultSet. Le rsultat nest jamais null. int executeUpdate (String requete) throws SQLException Excute une requte de modication des donnes ou de la base (bref, tout ce qui nest pas select). La valeur retourne normalement le nombre de lignes modies, ce qui a un sens pour insert, delete, update. Pour les autres oprateurs, le rsultat est 0. boolean execute (String requete) throws SQLException Envoie une requte SQL qui peut mme envoyer plusieurs rsultats. Le rsultat est true si la premire valeur renvoye est un ResultSet. Nous dtaillons plus avant la mthode execute en 1.5.3.
1.5.3 Execute
La mthode execute() permet denvoyer une requte, quelle soit de type select ou quelle soit une modication dune base. Les mthodes utilises dans lexemple suivant permettent de rcuprer des informations sur la requte. Bien entendu, dans la plupart des cas, le programmeur sait quelle est la requte, et donc utilise executeQuery ou executeUpdate(). La mthode execute() sera, par exemple, utilise dans un programme o lutilisateur pourra saisir une requte SQL quelconque.
Utilisation gnrale de Execute stmt.execute(queryStringWithUnknownResults); while(true) { int rowCount = stmt.getUpdateCount(); if(rowCount > 0) { // Des donnes ont t modifies System.out.println("Rows changed = " + count); stmt.getMoreResults(); continue; } if(rowCount == 0) { // Modification de la Structure, // ou pas de changement. System.out.println(" Pas de ligne modifie, ou la ligne est une commande DDL"); stmt.getMoreResults(); continue; } // Si on arrive ici, il sagit dune requte ResultSet rs = stmt.getResultSet; if(rs != null) { ... // Il faut utiliser les mtadata pour connatre // la liste des colonnes while(rs.next()) { ... // Traiter le rsultat stmt.getMoreResults(); continue; } break;
NULL : pour que la valeur dun paramtre soit NULL , il suft dutiliser la commande setNull
ensuite : maconnexion.commit() ; valide les requtes dj effectues lors de cette transaction ; maconnexion.rollback() ; annule les requtes dj effectues ;
o level peut valoir : TRANSACTION_READ_UNCOMMITTED TRANSACTION_READ_COMMITTED TRANSACTION_REPEATABLE_READ TRANSACTION_SERIALIZABLE TRANSACTION_READ_UNCOMMITTED on peut lire des modications ds quelles sont faites. En cas de ROLLBACK, postrieur, les valeurs lues peuvent tre fausses ; TRANSACTION_READ_COMMITTED on ne peut pas lire une range sur laquelle il y a des modications non valides (par commit) ; TRANSACTION_REPEATABLE_READ idem ; de plus, vite le cas o la transaction lit une range, une autre transaction la modie, et la premire relit la range modie ; la lecture donne toujours le mme rsultat, do le nom ; TRANSACTION_SERIALIZABLE le comportement est similaire celui obtenu avec un traitement squentiel. Empche le cas o 1. la transaction fait un select avec une condition ; 2. une seconde transaction cre des lignes qui satisfont la condition ; 3. la premire transaction refait le mme select.
Les arguments de getTables peuvent tre nuls. Les plus intressants sont : types : un tableau de chanes de caractre, donnant le type des tables rcuprer, entre autres : TABLE pour les tables stricto sensu, VIEW pour les vues.
boolean absolute (int i) throws SQLException se place sur lenregistrement numro i. Si i vaut 1, cest lquivalent de first. Si i est ngatif, on numrote partir du dernier enregistrement. La fonction renvoie true si le curseur pointe sur un enregistrement valide. boolean relative (int delta) throws SQLException Dplacement relatif la position courante. relative(-1) est quivalent previous, et relative(1) next(). La fonction renvoie true si le curseur pointe sur un enregistrement valide. int getRow () throws SQLException renvoie lindice de la ligne courante. Modication dun ResultSet Un ResultSet nest modiable que si on la demand et que le driver le gre. Les mthodes principales sont (remplacer XXX par int, String...) : void updateXXX (int i, XXX a) throws SQLException modie le ie champ, de type XXX, en lui donnant la valeur a. void updateXXX (String name, XXX a) throws SQLException modie le champ nomm name, de type XXX, en lui donnant la valeur a. void deleteRow () throws SQLException dtruit la ligne courante. void moveToInsertRow () throws SQLException se place sur une ligne spciale, qui sert aux insertions de nouvelles donnes.
10
void moveToCurrentRow () throws SQLException aprs un appel moveToInsertRow, revient sa position initiale. void insertRow () throws SQLException insre le contenu de la ligne dinsertion dans la base.