Vous êtes sur la page 1sur 18

Introduction JDBC Accs aux bases de donnes en Java

Eric Cariou
Universit de Pau et des Pays de l'Adour Dpartement Informatique Eric.Cariou@univ-pau.fr
1

Introduction

JDBC : Java Data Base Connectivity Framework permettant l'accs aux bases de donnes relationnelles dans un programme Java
Indpendament du type de la base utilise (mySQL, Oracle, Postgres ...)

Seule la phase de connexion au SGBDR change Slection de donnes dans des tables Cration de tables et insertion d'lments dans les tables Gestion des transactions

Permet de faire tout type de requtes


Packages : java.sql et javax.sql


2

Principes gnraux d'accs une BDD

Premire tape

Prciser le type de driver que l'on veut utiliser


Driver permet de grer l'accs un type particulier de SGBD

Deuxime tape
Rcuprer un objet Connection en s'identifiant auprs du SGBD et en prcisant la base utilise A partir de la connexion, crer un statement (tat) correspondant une requte particulire Excuter ce statement au niveau du SGBD Fermer le statement Se dconnecter de la base en fermant la connexion
3

Etapes suivantes

Dernire tape

Connexion au SGBD

Classe java.sql.DriverManager
Gestion du contrle et de la connexion au SGBD static void registerDriver(Driver driver)

Mthodes principales
Enregistre le driver (objet driver) pour un type de SGBD particulier Le driver est dpendant du SGBD utilis

static Connection getConnection( String url, String user, String password)


Cre une connexion permettant d'utiliser une base url : identification de la base considre sur le SGBD

Format de l'URL est dpendant du SGGB utilis

user : nom de l'utilisateur qui se connecte la base password : mot de passe de l'utilisateur

Gestion des connexions


Interface java.sql.Connection Prparation de l'excution d'instructions sur la base, 2 types


Instruction simple : classe Statement

On excute directement et une fois l'action sur la base L'instruction est gnrique, des champs sont non remplis Permet une pr-compilation de l'instruction optimisant les performances Pour chaque excution, on prcise les champs manquants Update : mise jour du contenu de la base Query : consulation (avec un select) des donnes de la base 5

Instruction paramtre : classe PreparedStatement


Pour ces 2 instructions, 2 types d'ordres possibles


Gestion des connexions

Mthodes principales de Connection


Statement createStatement()

Retourne un tat permettant de raliser une instruction simple

PreparedStatement prepareStatement( String ordre)


Retourne un tat permettant de raliser une instruction paramtre et pr-compile pour un ordre ordre Dans l'ordre, les champs libres (au nombre quelconque) sont prciss par des ?

Ex : ''select nom from clients where ville=?'' Lors de l'excution de l'ordre, on prcisera la valeur du champ

void close()

Ferme la connexion avec le SGBD 6

Instruction simple

Classe Statement
ResultSet executeQuery(String ordre)

Excute un ordre de type SELECT sur la base Retourne un objet de type ResultSet contenant tous les rsultats de la requte Excute un ordre de type INSERT, UPDATE, ou DELETE Ferme l'tat

int executeUpdate(String ordre)

void close()

Instruction paramtre

Classe PreparedStatement
Avant d'excuter l'ordre, on remplit les champs avec

void set[Type](int index, [Type] val)


Remplit le champ en ime position dfinie par index avec la valeur val de type [Type] [Type] peut tre : String, int, float, long ... Ex : void setString(int index, String val)

ResultSet executeQuery()

Excute un ordre de type SELECT sur la base Retourne un objet de type ResultSet contenant tous les rsultats de la requte Excute un ordre de type INSERT, UPDATE, ou DELETE

int executeUpdate()

Lecture des rsultats

Classe ResultSet
Contient les rsultats d'une requte SELECT

Plusieurs lignes contenant plusieurs colonnes On y accde ligne par ligne puis valeur par valeur dans la ligne boolean next()

Changements de ligne

Se place la ligne suivante s'il y en a une Retourne true si le dplacement a t fait, false s'il n'y avait pas d'autre ligne Se place la ligne prcdente s'il y en a une Retourne true si le dplacement a t fait, false s'il n'y avait pas de ligne prcdente Se place la ligne numrote index Retourne true si le dplacement a t fait, false sinon

boolean previous()

boolean absolute(int index)


Lecture des rsultats

Classe ResultSet
Accs aux colonnes/donnes dans une ligne [type] get[Type](int col)

Retourne le contenu de la colonne col dont l'lment est de type [type] avec [type] pouvant tre String, int, float, boolean ...

Ex : String getString(int col)

Fermeture du ResultSet

void close()

10

Exception SQLException

Toutes les mthodes prsentes prcdemment peuvent lever l'exception SQLException


Exception gnrique lors d'un problme d'accs la base lors de la connexion, d'une requte ...

Plusieurs spcialisations sont dfinies (voir API) int getErrorCode() : le code de l'erreur renvoy par le SGBD (et dpendant du type du SGBD) SQLException getNextException() : si plusieurs exceptions sont chanes entre elles, retourne la suivante ou null s'il n'y en a pas String getSQLState() : retourne l'tat SQL associ l'exception 11

Oprations possibles sur cette exception


Exemple

Accs une base Oracle contenant 2 tables


categorie (codecat, libellecat) produit (codprod, nomprod, codecat*) Source de l'exemple : A. Lacayrelle Fonctionne sur la machine ladybird sur le port 1521 Base s'appelle test Utilisateur qui se connecte : tudiant , mot de passe : mdpetud

Paramtres de la base

12

Exemple

Cration de la connexion la base


Connection con; // chargement du driver Oracle DriverManager.registerDriver( new oracle.jdbc.driver.OracleDriver()); // cration de la connexion con = DriverManager.getConnection( ''jdbc :oracle :thin :@ladybird :1521 :test, ''etudiant'', ''mdpetud''); //note: la syntaxe du premier argument dpend du type // du SGBD

13

Exemple

Excution d'une instruction simple de type SELECT


Lister toutes les caractristiques de toutes les catgories
Statement req; ResultSet res; String libelle; int code; req = con.createStatement(); res = req.executeQuery( ''select codcat, libellecat from categorie''); while(res.next()) { code = getInt(1); libelle = getString(2); System.out.println( '' produit : ''+code +'',''+ libelle); } 14 req.close();

Exemple

Excution d'une instruction simple de type UPDATE


Ajouter une catgorie crales de code 5 dans la table catgories
Statement req; int nb; req = con.createStatement(); nb = req.executeUpdate('' insert into categories values (5, 'cereales')''); System.out.println( '' nombre de lignes modifies : ''+nb); req.close(); 15

Instruction paramtre de type SELECT


Retourne tous les produits de la catgorie crales
PreparedStatement req; ResultSet res; String nom; int code; req = con.prepareStatement(''select codprod, nomprod from categorie c, produit p where c.codcat=p.codcat and libellecat = ?''); req.setString(1, ''cereales''); res = req.executeQuery(); while(res.next()) { code = getInt(1); libelle = getString(2); System.out.println( '' produit : ''+code +'',''+ libelle); } 16 req.close();

Exemple

Exemple

Instruction paramtre de type UPDATE


Ajout de 2 nouvelles catgories dans la table catgorie
PreparedStatement req; int nb; req = con.prepareStatement( ''insert into categories values (?,?)''); req.setInt(1, 12); req.setString(2, ''fruits''); nb = req.executeUpdate(); req.setInt(1, 13); req.setString(2, ''lgumes''); nb = req.executeUpdate(); req.close(); 17

Transaction

Fonctionnalit avance
Gestion des transactions Transaction

Un ensemble d'action est effectu en entier ou pas du tout

Voir documentation spcialise

18