JDBC SAmeh

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 8

Connexion à une base de données avec JDBC POOA

Connexion à la base de données avec JDBC


(Java Database Connectivity)
JDBC - Servlet - JSP - 2011 3
Architecture d'une application Java-JDBC-SGBD

JDB
Les composants de la connexion avec une base de données sont gérés par le
DriverManager

L'API JDBC permet à un programme Java d'interagir localement ou à distance


avec une base de données relationnelle selon le principe client-serveur
Le client est le programme Java et le serveur est un SGBD (ex: MySQL)

1 M. LAARIF
Connexion à une base de données avec JDBC POOA

La bibliothèque de classes JDBC se charge de trois tâches pendant la connexion


à une base de données :

 la création d'une connexion à la base


 l’envoie des requêtes SQL
 l'exploitation des résultats provenant de la base

Tous les objets et les méthodes liés aux bases de données sont présents dans le
package java.sql, on doit importer java.sql.* dans tout programme qui utilise la
technologie JDBC.

Connexion à la base de données


Un pilote JDBC spécifique à une base de données implémente l’interface
java.sql.Driver
Les pilotes sont disponibles à java.sun.com/products/jdbc
On doit installer le driver de la BD (pour MYSQL : ficher Jar :
com.mysql.jdbc_5.1.5.jar)
Le pilote est obligatoire, il convertit les appels JDBC en appels natifs. Il est
nécessaire de connaître le nom de la classe du pilote JDBC que l’on veut utiliser
Pilote ORACLE : oracle.JDBC.driver.OracleDriver
Pilote JDBC/ODBC : sun.jdbc.odbc.JdbcOdbcDriver
Pilote mySQL : com.mysql.jdbc.Driver,
Pilote DB2 : COM.ibm.db2.jdbc.net.DB2Driver
Pilote Sybase : com.sybase.jdbc.SybDriver etc..
Le chargement du pilote se fait en utilisant la methode Class.forName(String
Pilote) throws ClassNotFoundException
2 M. LAARIF
Connexion à une base de données avec JDBC POOA

Exemple :
Class.forName(" oracle.JDBC.driver.OracleDriver ");// Chargement du pilote Oracle
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");// Chargement du pilote ODBC
Class.forName("com.mysql.jdbc.Driver");// Chargement du pilote mysql

Pour se connecter à une base de données il faut fournir une URL qui indique où
se trouve la base :
URL ORACLE : jdbc:oracle:thin:@hostname:port Number:databaseName
URL ODBC : jdbc:odbc:IDDSN
URL mySQL : jdbc:mysql://hostname/ databaseName
URL DB2 : jdbc:db2:hostname:port Number/databaseName
URL Sybase : jdbc:sybase:Tds:hostname: port Number/databaseName
Et un login et un mot de passe pour un user autorisé.
La connexion à la base se fait en utilisant la méthode
DriverManager.getConnection("URL","user","pwd") throws SQLException, qui
retourne un objet de type Connection
Exemple :

Connection con = DriverManager.getConnection


("jdbc:mysql://localhost:3306/nomBase", "nomUser ", "pwduser");
Ou
String url = "jdbc:mysql://localhost/GestEtudiant";

String user = "root";


String passwd = "";
Connection con1 = DriverManager.getConnection(url, user, passwd);

Connection con2=
DriverManager.getConnection("jdbc:oracle:thin:@dbhost:1528:ORCL", "scott",
"tiger") ;

La requête ne peut être créée et exécutée que si le pilote et la connexion à la base


sont valides
Les requêtes de sélection
Pour réaliser des requêtes de sélection, un objet de type Statement doit être crée.
Statement symbolise une instrution SQL.
createStatement() throws SQLException
Statement req = con.createStatement();
Le résultat d'une requête est récupéré par un objet de type ResultSet et permet
d'accéder aux données extraites grâce à la requête.
ResultSet res = requete.executeQuery ("select * from destinations");

3 M. LAARIF
Connexion à une base de données avec JDBC POOA

Après la requête, le "curseur" est positionné juste avant la première ligne


du résultat, la méthode next() permet d'avancer d'enregistrements en
enregistrements séquentiellement : res.next()
Pour récupérer les données dans chaque colonne, l'interface ResultSet
propose plusieurs méthodes adaptées aux types des données récupérées :
getString(NumCol), getInt(NumCol), getFloat, getDate(NumCol)…

Une colonne est designée par son ordre dans le résultat ou par son nom

 getInt(int): récupère sous forme d'entier le contenu d'une colonne désignée


par son numéro
 getInt(String): récupère sous forme d'entier le contenu d'une colonne
désignée par son nom

La méthode getMetaData(): retourne les métadonnées de l'objet (l'objet


ResultSetMetaData)

Les requêtes de mises à jour :

La mise à jour d'une base de données peut être effectuée par le biais d'une
requête SQL de type UPDATE, INSERT ou DELETE à partir de la méthode
executeUpdate("Requête") sur un objet Statement.
Le résultat renvoyé par l'exécution de la requête indique le nombre de lignes
mises à jour dans la base, contrairement à une requête de sélection qui
renvoie un ResultSet.
Déconnexion :
La méthode close() permet de libérer les ressources prises par la création
d'objets de type ResultSet, Statement, et Connection.

Structure d'une application JDBC

import java.sql.DriverManager; // gestion des pilotes


import java.sql.Connection; // une connexion à la BD
import java.sql.Statement; // une instruction sql
import java.sql.ResultSet; // un résultat (lignes/colonnes)
import java.sql.SQLException; // une erreur
public class exempleJDBC {
try {
// chargement du pilote
// ouverture de connexion
// exécution d’une requête
// Traitement des résultats
// Fermeture de la connexion

4 M. LAARIF
Connexion à une base de données avec JDBC POOA

} catch (Exception ex) { }


}

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JdbcExample2 {
public static void main(String args[]) {
Connection con = null;
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection
("jdbc:mysql://localhost:3306/hotel","user","123456");
if(!con.isClosed())
System.out.println("Connexion au serveur MySQL par TCP/IP...");
} catch(Exception e) {
System.err.println("Exception: " + e.getMessage());
} finally {
try {
if (con != null)
con.close();
} catch(SQLException e) {}
}
}
}
Méthode de chargement explicite d'un pilote :
void loadDriver() throws ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");
}
L'appel à forName déclenche un chargement dynamique du pilote.
Class.forName(String className) : Retourne la classe d'objet associé à la
classe ou l'interface donné avec le nom de la chaîne de caractères.
Un programme peut utiliser plusieurs pilotes, un pour chaque base de
données. Le pilote doit être accessible à partir de la variable d'environnement
CLASSPATH.
Connexion à la base de données
Méthode d'ouverture d'une nouvelle connexion :
Connection newConnection() throws SQLException {
final String url = "jdbc:mysql://localhost/test";
Connection conn = DriverManager.getConnection(url,"user","pass");
return conn;
}
5 M. LAARIF
Connexion à une base de données avec JDBC POOA

L'URL est de la forme :


jdbc:sous-protocole:sous-nom

Méthode de composition d'une requête SQL de type SELECT :


// Définir la requête dans une chaîne de caractères
String query = "SELECT nom,prenom,age FROM etudiant";
// Envoi de la requête et récupération du résultat
ResultSet rs = st.executeQuery(query);
// Traitement des résultats
while (rs.next()) {
// Instruction qui récupèrent les données des champs-attributs
// suivant le nombre d'enregistrements
rs.getString("nom_champs"|numéro);
rs.getInt("nom_champs"|numéro);
rs.getFloat("nom_champs"|numéro),
}
public void listEtudiants() throws SQLException {
Connection conn = null;
try {
// créer une nouvelle connexion
conn = newConnection();
Statement st = conn.createStatement();
// Définir, envoi de la requête et réception du résultat
String query = "SELECT nom,prenom,age FROM etudiant";
ResultSet rs = st.executeQuery(query);
// Traitement des résultats
while (rs.next()) {
System.out.println( // Récupération du contenu
rs.getString("nom"), // de l'attribut 'nom'
rs.getString("prenom"), rs.getInt("age") );
}
} finally { // Fermer la connexion
if (conn != null) conn.close();
}
}
Modification de la base de données
Création d'une table dans la BD :
une table "personne" avec trois attributs et une clé primaire non nulle
et auto-incrémentée.
Statement st = conn.createStatement();
String query = "CREATE TABLE personne
(id int not null auto_increment,
prenom VARCHAR(15),
6 M. LAARIF
Connexion à une base de données avec JDBC POOA

nom varchar(15),
age INT,
primary key(id))";
st.executeUpdate(query);
Insertion de lignes
Statement st = conn.createStatement();
int nb = st.executeUpdate(
"INSERT INTO personne(Nom,Age) " +
"VALUES ('" + nom + "', " + age + ")"
);
Ce principe est aussi utilisable pour les instructions UPDATE et
DELETE.
Statement st = conn.createStatement();
int nb = st.executeUpdate(
"UPDATE personne " +
"SET Age = " + age + " " +
"WHERE Nom = '" + nom + "' "
);
import java.sql.*;
public class ExempleJdbc { // Connexion à une BD MySQL avec JDBC
et requête SQL
public ExempleJdbc() {
try {
this.loadDriver(); this.listEtudiants();
} catch (ClassNotFoundException e) {
System.err.println("Pilote JDBC introuvable : " + e.getMessage());
} catch (SQLException e) { }
}
void loadDriver() throws ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");
}
Connection newConnection() throws SQLException {
final String url = "jdbc:mysql://localhost:3306/test";
Connection conn = DriverManager.getConnection(url, "client",
"123456");
return conn;
}
public void listEtudiants() throws SQLException {
Connection conn = null;
try {
conn = newConnection(); Statement st = conn.createStatement();
String query = "SELECT nom,prenom,age FROM etudiant ORDER BY
age";
7 M. LAARIF
Connexion à une base de données avec JDBC POOA

ResultSet rs = st.executeQuery(query);
while (rs.next()) {
System.out.printn(rs.getString(1)+" "+rs.getString("prenom")+"
"+rs.getInt(3));
}
} finally { if (conn != null) conn.close(); }
}
public static void main(String[] argv) { new ExempleJdbc(); } }
Création de la base de données "exemple" dans MySQL.
Se connecter en "root" sur MySQL et créer la base de données "exemple".
Se connecter sur la base "mysql" et définir les droits d'un utilisateur :
C:/xampp/mysql/bin/mysql -u root -p
mysql> create database exemple;
mysql> use exemple;
mysql> show databases;
mysql> use mysql;
mysql> grant all privileges on exemple.*
to 'login'@'localhost'identified by 'mot_de_passe_base_de_données'
with grant option;
mysql> flush privileges;
mysql> exit;

Les données d'identifications (login et mot_de_passe) serviront


dans une application Java pour la connexion du pilot JDBC à la BD.

Rappel des commandes SQL de base :


Créer une base de données : CREATE DATABASE nom_BD;
Activer une base de données : USE nom_BD;
Créer une table : CREATE TABLE nom_table (liste d'attributs);
Insérer des données dans une table :
INSERT INTO nom_table (liste d'attributs) VALUES (valeurs);
Afficher le contenu d'une table : SELECT * FROM nom_table;
Afficher la structure d'une table : DESCRIBE nom_table;

8 M. LAARIF

Vous aimerez peut-être aussi