JDBC le langage Java XVI-1 JMF



Documents pareils
Java DataBaseConnectivity

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

Programmation d application Bases de données avec Java

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Introduction à JDBC. Accès aux bases de données en Java

TP Programmation Java / JDBC / Oracle

JDBC JDBC. Java DataBase Connectivity

Java et les bases de données

Accès aux bases de données

1. Langage de programmation Java

OpenPaaS Le réseau social d'entreprise

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Dialogue avec la base de données

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

RMI le langage Java XII-1 JMF

Bases de données Page 1 de 11. Bases de données. Prof. : Dzenan Ridjanovic

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

1/ Présentation de SQL Server :

Mysql. Les requêtes préparées Prepared statements

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Généralités sur le Langage Java et éléments syntaxiques.

Connectivité aux bases de données Java (JDBC)

Programmer en JAVA. par Tama

Application web de gestion de comptes en banques

Olivier Mondet

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Java Database Connectivity (JDBC) - Langage SQL

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

FileMaker 13. Guide ODBC et JDBC

Création et Gestion des tables

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Mise en oeuvre d'une base de données mono-utilisateur avec SQLite

Panorama des Bases de Données

Chapitre 2. Classes et objets

Module BD et sites WEB

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Cours: Administration d'une Base de Données

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Le langage SQL (première partie) c Olivier Caron

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Exercices sur SQL server 2000

Héritage presque multiple en Java (1/2)

Chapitre 10. Les interfaces Comparable et Comparator 1

Optimisations des SGBDR. Étude de cas : MySQL

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Bases de données relationnelles

Compte-rendu de projet de Système de gestion de base de données

Exploitation de bases de données relationnelles et orientées objet IFT287

Compte Rendu d intégration d application

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

ACTIVITÉ DE PROGRAMMATION

TP1 : Initiation à Java et Eclipse

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Initiation aux bases de données (SGBD) Walter RUDAMETKIN

Chapitre I Notions de base et outils de travail

contact@nqicorp.com - Web :

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Notes de cours : bases de données distribuées et repliquées

Architectures web/bases de données

Logiciel de gestion de caisse et d ardoises

IFT3030 Base de données. Chapitre 2 Architecture d une base de données

PDO : PHP Data Object 1/13

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

Le Langage De Description De Données(LDD)

PHP 5. La base de données MySql. A. Belaïd 1

Développement d applications avec les bases de données

LES ACCES ODBC AVEC LE SYSTEME SAS

Connexion à une base de données. Connexion à une base de données. Connexion à une base de données Développement d'une application

as Architecture des Systèmes d Information

Construire une base de donnée pour bibliothèque

FileMaker 10. Guide ODBC et JDBC

Le Langage SQL version Oracle

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Présentation du module Base de données spatio-temporelles

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

I. MySQL : Serveur et SGBD

Annexe : La Programmation Informatique

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

La technologie Java Card TM

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Java - MySQL. Code: java-mysql

SQL Historique

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

Initiation à JAVA et à la programmation objet.

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

La base de données XML exist. A. Belaïd

Transcription:

JDBC Java Database Connectivity XVI-1

JDBC JDBC est une API Java (ensemble de classes et d'interfaces défini par SUN et les acteurs du domaine des BD) permettant d'accéder aux bases de données à l'aide du langage Java via des requêtes SQL. Cette API permet d'atteindre de manière quasi-transparente des bases Sybase, Oracle, Informix,... avec le même programme Java JDBC. En fait cette API est une spécification de ce que doit implanter un constructeur de BD pour que celle ci soit interrogeable par JDBC. De ce fait dans la programmation JDBC on utilise essentiellement des références d'interface (Connection, Statement, ResultSet,...). Sun et les constructeurs de BD se sont charger de fournir (vendre ou donner) des classes qui implémentent les interfaces précitées qui permettent de soumettre des requêtes SQL et de récupérer le résultat. Par exemple Oracle fournit une classe qui, lorsqu'on écrit Statement stmt = conn.createstatement(); retourne un objet concret (de classe class OracleStatement implements Statement par exemple) qui est repéré par la référence stmt de l'interface Statement. XVI-2

Pilotes (drivers) L'ensemble des classes qui implémentent les interfaces spécifiées par JDBC pour un gestionnaire de bases de données particulier est appelé un pilote JDBC. Les protocoles d'accès aux BD étant propriétaires il y a donc plusieurs drivers pour atteindre diverses BD. Parmi les interfaces, l'une d'entre elles, l'interface Driver, décrit ce que doit faire tout objet d'une classe qui implémente l'essai de connexion à une base de données. Entre autre, un tel objet doit obligatoirement s'enregistrer auprès du DriverManager et retourner en cas de succès un objet d'une classe qui implémente l'interface Connection. Ces pilotes (drivers) sont dits jdbc-baseaatteindre. Le premier pilote (développé par SUN) est un pilote jdbc:odbc. La liste des pilotes disponibles se trouve à : http://industry.java.sun.com/products/j dbc/drivers XVI-3

Architecture JDBC programme Java gestionnaire de pilotes JDBC pilote (développé par le programmeur i.e. vous même) (donné par SUN i.e. est une classe Java) (donné ou vendu par un fournisseur d'accès à la BD) bases de données XVI-4

Les 4 types de pilotes Les pilotes sont classés en quatre types : Ceux dits natifs qui utilisent une partie écrite dans du code spécifique non Java (souvent en langage C) et appelé par ces implantations : les pilotes de classe 1 et 2. Ces pilotes sont rapides mais doivent être présent sur le poste client car ne peuvent pas être téléchargés par le ClassLoader de Java (ce ne sont pas des classes Java mais plutôt des librairies dynamiques). Ils ne peuvent donc pas être utilisés par des applets dans des browsers classiques. Ceux dits 100% Java qui interrogent le gestionnaire de base de données avec du code uniquement écrits en Java : les pilotes de classe 3 et 4. Ces pilotes peuvent alors être utilisés par des applets dans des browsers classiques. Plus précisément : pilote de classe 1 : pilote jdbc:odbc pilote de classe 2 : pilote jdbc:protocole spécifique et utilisant des méthodes natives. pilote de classe 3 : pilote écrit en Java jdbc vers un middleware qui fait l'interface avec la BD pilote de classe 4 : pilote écrit en Java jdbc:protocole de la BD. Accède directement à l'interface réseau de la BD. XVI-5

Structure d'un programme JDBC Un code JDBC est de la forme : - recherche et chargement du driver approprié à la BD. - établissement de la connexion à la base de données. - construction de la requête SQL - envoi de cette requête et récupération des réponses - parcours des réponses. Syntaxe Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection conx = DriverManager.getConnection(...); Statement stmt = conx.createstatement(); ResultSet rs = stmt.executequery("select a, b, c... FROM... WHERE..."); while (rs.next()) {... // traitement } La programmation avec JDBC On utilise le paquetage java.sql. La plupart des méthodes lèvent l'exception java.sql.sqlexception. XVI-6

Les produits JDBC Javasoft fournit 3 produits composants intégré dans le JDK (1.1 et suivant) : - un gestionnaire de pilotes JDBC. Le gestionnaire de pilotes JDBC permet de connecter les programmes Java au bon pilote JDBC. - un pont JDBC-ODBC - un ensemble de tests pour les pilotes JDBC. Voir à http://www.javasoft.com:80/products/jdb c/download2.html la partie "The JDBC Driver Test Suite". Les tests pour les pilotes JDBC vérifient que le pilote implémente la "norme" JDBC COMPLIANT et l'implémentation de toutes les classes et méthodes JDBC ainsi que les fonctionnalités ANSI SQL-2 Entry Level (norme ANSI 1992) XVI-7

Chargement du pilote On commence un programme JDBC en chargeant dans le programme, le pilote approprié pour la BD. Comme le programme peut interroger divers types de BD il peut avoir plusieurs pilotes. C'est au moment de la connexion que sera choisi le bon pilote par le DriverManager. On a donc une architecture : programme Java gestionnaire de pilotes JDBC JDBC API pilote A pont JDBC-ODBC pilote ODBC pilote B bases de données bases de données bases de données Syntaxe : Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); ou encore Class.forName("oracle.jdbc.driver.OracleDriver"); XVI-8

Chargement du pilote (suite) En fait cette instruction construit un objet de la classe Class qui modélise la classe dont le nom est l'argument de la méthode statique forname(...). Cette classe est un driver c'est à dire ici une classe qui implémente l'interface Driver. Dans les spécifications de JDBC il est dit qu'obligatoirement ces classes doivent, au moment de leur premier chargement : - créer une instance de cette classe - enregistrer cette instance au sein du DriverManager par la méthode statique registerdriver(...) de cette classe. voir à http://java.sun.com/products/jdk/1.1/do cs/guide/jdbc/getstart/drivermanager.do c.html#999050 "All Driver classes should be written with a static section that creates an instance of the class and then registers it with the DriverManager class when it is loaded. Thus, a user would not normally call DriverManager.registerDriver directly; it should be called automatically by a driver when it is loaded. A Driver class is loaded, and therefore automatically registered with the DriverManager" XVI-9

Chargement du pilote (fin) Exercice : concrétement comment cela est il écrit? réponse : Quand vous écrivez une classe MonDriver implémentant l'interface Driver cette classe doit contenir le bloc static suivant static { DriverManager.registerDriver(new MonDriver()); } XVI-10

La connexion On ouvre une connexion avec une des méthodes DriverManager.getConnection(...) qui retourne un objet d'une classe qui implémente l'interface Connection. Ces méthodes contiennent comme premier argument une "URL JDBC". Elles recherchent le pilote adapté pour gérer la connexion avec la base repérée par cette URL. Une URL JDBC doit commencer par jdbc. Le second argument est le protocole sous jacent dans lequel le pilote traduit. Le troisième argument est un identificateur de base de données. La syntaxe d'une URL JDBC est donc: jdbc:<sous-protocole>:<baseid> la partie baseid est propre au sous-protocole. Exemples d'url JDBC : jdbc:odbc:test1 ou encore jdbc:odbc:@orsay:1751:test1 jdbc:oracle:thin:@orsay:1751:test1 Les arguments suivants de Driver.getConnection(...) sont des informations nécessaires à l'ouverture de la connexion souvent un nom de connexion à la base suivi d'un mot de passe. Connection conx = DriverManager.getConnection(URLjdbc, "dbuser1", "pwuser1"); XVI-11

La classe DriverManager Cette classe est une classe qui ne contient que des méthodes statiques. Elle fournit des méthodes qui sont des utilitaires pour gérer l'accès aux bases de données par Java et les différents drivers JDBC à l'intèrieur d'un programme Java. Finalement on ne créée ni ne récupère d'objet de cette classe. XVI-12

Requêtes au bases de données Sans trop rentrer dans les détails (voir un cours de bases de données pour cela), il existe différentes sortes de requêtes SQL dont : - les requêtes SELECT qui opèrent sur une ou plusieurs tables et placent le résultat dans une "table" résultante. - les requêtes d'action qui modifient une ou des colonnes ou lignes de table. On a par exemple comme requête d'action UPDATE, DELETE, APPEND. - des SQL DDL (Data Definition Language) comme CREATE TABLE, DROP TABLE,... SQL est un langage non sensible à la casse (culture IBM- SQL et non pas culture Unix-C). En général les mots clés du langage SQL sont mis en majuscules. Syntaxiquement en Java on utilise executequery(...) si la requête est une requête SELECT et executeupdate(...) si a requête est une requête d'action ou une SQL DDL. XVI-13

Exécution d'instructions SQL Toutes les instructions ANSI SQL-2 Entry Level sont acceptés puisque le driver jdbc:protocole SGBD sous-jacent a été testé pour cela. On utilise l'un des trois interfaces Statement, PreparedStatement, CallableStatement. Les instructions PreparedStatement sont précompilées. On utilise CallableStatement pour lancer une procédure du SGBD. Avec un Statement on a : Statement smt = conx.createstatement(); ResultSet rs = smt.executequery( "SELECT * FROM Livres" ); XVI-14

Récupération des résultats (suite) Les résultats des requêtes SELECT ont été mis dans un ResultSet. Cet objet récupéré modélise le résultat qui peut être vu comme une table. Par exemple SELECT nom, prenom, adresse FROM Personnes retourne un ResultSet qui modélise : Zidane Zinedine Turin Blanc Laurent Milan Deschamps Didier Londres......... Un pointeur géré par Java jdbc permet de parcourir tout le ResultSet et est initialisé : il est automatiquement positionné avant la première ligne de résultat. On parcourt alors tout le ResultSet pour avoir l'ensemble des réponses à la requête. La boucle de parcours est : while( rs.next() ) { // traitement } XVI-15

Récupération des résultats (fin) Les colonnes demandées par la requête sont numérotées à partir de 1 (culture IBM-SQL et non pas culture Unix-C). Remarque La numérotation est relative à l'ordre des champs de la requête et non pas l'ordre des champs de la table interrogée (évidemment). De plus les colonnes sont typées en type SQL. Pour récupérer une valeur de colonne il faut donc indiquer le numéro de la colonne ou son nom et faire la conversion de type approprié. Par exemple : Statement stmt =...; ResultSet rs = stmt.executequery(select nom, prenom, age, date FROM LaTable"); String lenom = rs.getstring( 1 ) ); String leprenom = rs.getstring( 2 ); int lage = rs.getint ( 3 ); Date ladate = rs.getdate( 4); On peut aussi désigner les colonnes par leur nom dans la BD (c'est moins rapide mais plus lisible) et réécrire : ResultSet rs = stmt.executequery("select nom, prenom, age, date FROM LaTable"); String lenom = rs.getstring( "nom") ); String leprenom = rs.getstring( "prenom" ); int lage = rs.getint ( "age" ); Date ladate = rs.getdate( "date "); XVI-16

Correspondance type SQL-type Java Les correspondances entre type SQL et type Java sont données par les spécifications JDBC. En voici certaines : SQL type CHAR VARCHAR LONGVARCHAR NUMERIC DECIMAL BIT TINYINT SMALLINT INTEGER BIGINT REAL FLOAT DOUBLE BINARY VARBINARY LONGVARBINARY DATE TIME TIMESTAMP Java Type String String String java.math.bigdecimal java.math.bigdecimal boolean byte short int long float double double byte[] byte[] byte[] java.sql.date java.sql.time java.sql.timestamp XVI-17

Conclusion : finalement comment cela fonctionne? Après l'instruction Connection conx = DriveManager.getConnection(URLjdbc, "dbuser1", "pwuser1"); un pilote à la base de données a été trouvé par le programme (et la classe DriverManager) parmi les nombreux pilotes qui ont pu être chargés à la suite d'instructions Class.forName("piloteToBD"); Ce pilote a été capable de faire une connexion à la base et de retourner un objet d'une classe qui implémente l'interface Connection. La classe est peut-être OracleConnection ou SUN_JDBC_ODBC_Connection, peu importe l'essentiel est que cette classe implémente cette interface et qu'on puisse alors repéré cet objet par une référence d'interface Connection (polymorphisme!!). Voila pourquoi le code que nous écrivons est universel et permet d'accéder à tout type de base. XVI-18

Le fonctionnement (suite) Par la suite cet objet repéré par conx va retourner, à la suite de l'instruction, Statement smt = conx.createstatement(); un objet d'une classe qui implémente l'interface Statement et qui est propre à la base (par exemple OracleStatement ou SUN_JDBC_ODBC_Statement, peu importe l'essentiel est que cette classe implémente l'interface Statement et qu'on puisse alors repérer cet objet par une référence d'interface Statement air connu). Enfin l'instruction ResultSet rs = smt.executequery( "SELECT * FROM Livres" ); demande le lancement de la méthode executequery(...) sur un objet d'une classe qui implémente Statement et qui est propre à la base et cela fonctionne et est universel (pour la troisième fois ;-)). XVI-19

PreparedStatement Lors de l'envoi d'une requête pour exécution 4 étapes doivent être faites : - analyse de la requête - compilation de la requête - optimisation de la requête - exécution de la requête et ceci même si cette requête est la même que la précédente!! Or les 3 premières étapes ont déja été effectuées dans ce cas. Les bases de données définissent la notion de requête préparée, requête où les 3 premieres étapes ne sont effectuées qu'une seule fois. JDBC propose l'interface PreparedStatement pour modéliser cette notion. Cette interface dérive de l'interface Statement. De plus on ne peut pas avec un Statement construire des requêtes où un des arguments est une variable i.e. requêtes paramétrées. Il faut pour cela utiliser un PreparedStatement. XVI-20

PreparedStatement : Syntaxe Même sans paramêtres, les PreparedStatement ne s'utilisent pas comme des Statement. Au lieu d'écrire : Statement smt = conx.createstatement(); ResultSet rs = smt.executequery( "SELECT * FROM Livres" ); on écrit : PreparedStatement psmt = conx.preparestatement("select * FROM Livres" ); ResultSet rs = psmt.executequery(); à savoir la requête est décrite au moment de la "construction" pas lors de l'exécution qui est lancée par executequery() sans argument. XVI-21

Requêtes paramétrées On utilise donc les PreparedStatement et on écrit des requêtes de la forme : SELECT nom FROM Personnes WHERE age >? AND adresse =? Puis on utilise les méthodes settype(numérodelargument, valeur) pour positionner chacun des arguments. Les numéros commencent à 1 dans l'ordre d'apparition dans la requête. On a donc un code comme : PreparedStatement psmt = conx.preparestatement("select nom FROM Personnes WHERE age >? AND adresse =?" ); psmt.setint(1, 22); psmt.setstring(2, "Turin"); ResultSet rs = psmt.executequery(); XVI-22

CallableStatement Certaines requêtes pour une base de données sont si courantes qu'elles sont intégrées dans la base de données. On les appelle des procédures stockées et elles ont modélisées en JDBC par l'interface CallableStatement qui dérive de PreparedStatement. Elle peut donc avoir des paramétres. On lance l'éxécution d'une procédure stockée à l'aide de la syntaxe : {call nom_procedure[(?,?,...)]} ([ ] signifiant optionnel) Pour une procédure retournant un résultat on a la syntaxe : {? = call nom_procedure[(?,?,...)]} La syntaxe pour une procédure stockée sans paramêtres est : {call nom_procedure} Utilisation : CallableStatement cstmt = conx.preparecall("{call sp_setdomicile(?,?) }"); cstmt.setstring(1, "Djorkaeff"); cstmt.setstring(2, "KaisersLautern"); csmt.executeupdate(); XVI-23

les MetaData On peut avoir sur une BD, des informations sur la BD elle même. Ces informations sont appelées des métadatas. On obtient un objet de la classe DatabaseMetaData à partir de la connexion par : conx = DriverManager.getConnection(dbURL, "u1db1", "u1db1"); DatabaseMetaData dmd = conx.getmetadata(); À partir de là, cette classe fournit beaucoup de renseignements sur la base par exemple : String nomsgbd = dmd.getdatabaseproductname(); De même on peut avoir des métadatas sur un ResultSet : //Affichage des colonnes de la table rs = smt.executequery( "SELECT * FROM Livres " ); ResultSetMetaData rsmd = rs.getmetadata(); int numcols = rsmd.getcolumncount(); for ( int i = 1; i <= numcols; i++ ) System.out.println( "\t" + i + " : " + rsmd.getcolumnlabel( i ) ); XVI-24

JDBC 2.0 Des ajouts ont été faits aux spécifications JDBC 1.0 et beaucoup d'interfaces et de classes de java.sql ont été enrichis. De plus certains ajouts sont implantés dans le paquetage javax.sql. Les ajouts de JDBC 2.0 concernent : - des nouvelles possibilités de traiter les ResultSet (autrement que séquenciellement,...) - le traitement par batch - des types de données avancés - la notion d'ensemble de lignes manipulables même sans connexion maintenue ouverte : les RowSet. - l'utilisation du service de nommage universel de Java, JNDI - l'utilisation du service de transaction de Java JTS. XVI-25

Traitement avancé des ResultSet Essentiellement JDBC 2.0 propose sur les ResultSet des déplacements (scrolling) et des mises à jour (updatability). Les déplacements peuvent être relatifs ou absolus. Les ResultSet sont désormais de 3 "types" : - forwardonly - scroll-insensitive. Le ResultSet admet les déplacements et n'est pas averti des changements dans la base le concernant. - scroll-sensitive. Le ResultSet admet les déplacements et n'est pas averti des changements dans la base le concernant. Ils peuvent aussi avoir des "types de concurrence" : readonly ou updatable. Utilisation : Statement stmt = conx.createstatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); stmt.setfetchsize(25); ResultSet rs = stmt.executequery( "SELECT emp_no, salary FROM employees"); XVI-26

Traitement avancé des ResultSet (suite) Un ResultSet updatable (de type CONCUR_UPDATABLE) peut mettre à jour, insérer, détruire certaines de ses lignes. Ces modifications sont faites sur le ResultSet pas dans la base. Elles seront faites dans la base à l'aide de la méthode updaterow() Exemple : rs.first(); rs.updatestring(1, "100020"); rs.updatefloat("salary", 10000.0f); rs.updaterow(); voir à : http://java.sun.com/products/jdk/1.3/do cs/guide/jdbc/spec2/jdbc2.1.frame5.html XVI-27

Traitement avancé des ResultSet (suite) Mouvement avancé du curseur. JDBC 2.0 permet de lancer sur un ResultSet les méthodes : public boolean absolute(int row) throws SQLException public boolean relative(int rows) throws SQLException public boolean previous() throws SQLException public void afterlast() throws SQLException public void beforefirst() throws SQLException XVI-28

Bibliographie Livre JDBC et Java Guide du programmeur, George Reese edition O'Reilly, ISBN 2-84177-042-7 Les spécifications JDBC sont à : http://java.sun.com/products/jdk/1.3/do cs/guide/jdbc/getstart/gettingstartedto C.fm.html La page de départ de la technologie JDBC http://java.sun.com/products/jdk/1.3/do cs/guide/jdbc/index.html le tutorial de SUN sur JDBC http://www.javasoft.com/docs/books/tuto rial/jdbc/index.html Bases de données MS-Access, Conception et programmation, Steven Roman traduit en français; ed O'Reilly ISBN 2-84177-054-0 Merci à Henri ANDRÉ pour ses remarques et suggestions. XVI-29