Académique Documents
Professionnel Documents
Culture Documents
Introduction Architecture
JDBC : Java Data Base Connectivity
API (Application Programming interface) permettant l'accès aux bases de JDBC (Java Database Connectivity) est
données relationnelles dans un programme Java une API permettant un accès simple et
JDBC fait partie du JDK (Java Development Kit). rapide à un grand nombre de bases de
données.
Independent du type de la base utilisée (mySQL, Oracle, Postgres ...)
JDBC est indépendant des BD.
Toutes les classes et interfaces sont dans le package java.sql : Il y a un pilote (Driver) par base de
import java.sql.* données.
Permet de faire tout type de requêtes
Sélection de données dans des tables
Création de tables et insertion d'éléments dans les tables
Gestion des transactions
MME SAMEH HBAIEB-COURS JAVA AVANCEE 3 MME SAMEH HBAIEB-COURS JAVA AVANCEE 4
Présentation générale JDBC JDBC 4 : standard de l’API Java
Une même application peut utiliser plusieurs pilotes pour accéder à
plusieurs BD
On doit pouvoir changer de SGBD sans modifier le code de l’application.
JDBC est composée d'un certain nombre de classes et d'interfaces Java, d'un
gestionnaire de pilotes et des pilotes adéquats.
la base de données. Il convertit les appels de méthode JDBC Ce pilote convertit les appels de méthode JDBC en appels natifs de
MME SAMEH HBAIEB-COURS JAVA AVANCEE 13 MME SAMEH HBAIEB-COURS JAVA AVANCEE 14
MME SAMEH HBAIEB-COURS JAVA AVANCEE 15 MME SAMEH HBAIEB-COURS JAVA AVANCEE 16
Exemple: Définition d’une classe Etape 2. Déclaration et exécution de la
DatabaseConnection requête (Statement)
package com.jdbc.util;
import java.sql.Connection; Une fois la connexion établie, il est possible d’interagir avec la BD.
import java.sql.DriverManager;
public static Connection getConnection()
import java.sql.SQLException; { Les interfaces JDBCStatement, CallableStatement et PreparedStatement
return con;
Serveur où est
public class DatabaseConnection { stockée la BD
} définissent les méthodes qui permettent d'envoyer des commandes SQL et
private static Connection con = null; }
static
{ String url = "jdbc:mysql:// localhost:3306/org";
de recevoir des données de la BD.
String user = "root";
String pass = "root";
driver Nom de la BD Il faut tout d’abord demander la création du statement:
try {
Class.forName("com.mysql.jdbc.Driver"); suite Statement monInstruction = maConnexion.createStatement( );
con = DriverManager.getConnection(url, user, pass);
} Ensuite il faut déclarer le code SQL de la requête:
catch (ClassNotFoundException | SQLException e) {
e.printStackTrace(); ResultSet monResultat = monInstruction.executeQuery(maRequête);
} }
MME SAMEH HBAIEB-COURS JAVA AVANCEE 17 MME SAMEH HBAIEB-COURS JAVA AVANCEE 18
MME SAMEH HBAIEB-COURS JAVA AVANCEE 19 MME SAMEH HBAIEB-COURS JAVA AVANCEE 20
Exemple 1. Select one record Exemple 2. Select more records
Statement st = con.createStatement(); public static void main(String[] args) throws Exception
// It returns a tabular structure so we need { // Loading and registering drivers
// ResultSet as it stores chunk of data into structures Class.forName("oracle.jdbc.OracleDriver");
ResultSet rs = st.executeQuery(query); // Establishing a connection
// Now we are having our data in object of ResultSet Connection con = DriverManager( "jdbc:oracle:thin:@localhost:1521:XE",
// which is no more tabular "username", "password");
// Here pointer is lagging with data for which we Statement st = con.createStatement();
// use next() method to take it to next record // Executing the query and storing the result
rs.next(); ResultSet rs = st.executeQuery( "select username from Students where Marks >= 70");
// Here we are fetching username column data // Processing the results
String name = rs.getString("username"); while (rs.next()) {
System.out.println(name); System.out.println(rs.getString(“username"));
// It is good practice to close the connection using close() method }
// Closing the statement first // Closing the connections
st.close(); con.close();
// Now close the connection also }
con.close();
}}
MME SAMEH HBAIEB-COURS JAVA AVANCEE 21 MME SAMEH HBAIEB-COURS JAVA AVANCEE 22
MME SAMEH HBAIEB-COURS JAVA AVANCEE 23 MME SAMEH HBAIEB-COURS JAVA AVANCEE 24
Variante 2 Variante 3
public static void main(String[ ] args) throws SQLException{ public static void main(String[ ] args) throws SQLException{
… …
ResultSet monResultat = monInstruction.executeQuery( ResultSet monResultat = monInstruction.executeQuery(
"select numfilm, titre from film where titre like 'A%'"); "select numfilm, titre from film where titre like 'A%'");
while(monResultat.next( )){ while(monResultat.next( )){
Stringtitre = monResultat.getString(2); for (int c = 1; c <= 2; c++)
int numero = monResultat.getInt(1); System.out.print(monResultat.getString(c) + "\t");
System.out.println(numero + "\t" + titre); System.out.println(" ");
} }
… …
} /*du main*/ } /*du main*
MME SAMEH HBAIEB-COURS JAVA AVANCEE 25 MME SAMEH HBAIEB-COURS JAVA AVANCEE 26
MME SAMEH HBAIEB-COURS JAVA AVANCEE 27 MME SAMEH HBAIEB-COURS JAVA AVANCEE 28
Contenu de l’interface ResultSetMetaData Exemple avec ResultSetMetaData
ResultSet monResultat =
monInstruction.executeQuery("select numfilm, titre from film");
ResultSetMetaData rsmd=monResultat.getMetaData();
int nbColonnes = rsmd.getColumnCount();
for(int i=1; i<=nbColonnes; i++){
String nomColonne = rsmd.getColumnName(i);
String nomType = rsmd.getColumnTypeName(i);
System.out.println("La colonne "+i+" est “ +nomColonne+" dont le
nom de type Oracle est “ +nomType);
}
MME SAMEH HBAIEB-COURS JAVA AVANCEE 29 MME SAMEH HBAIEB-COURS JAVA AVANCEE 30
requête) Insérons maintenant des enregistrements dans cette table à l’aide du code
suivant: PreparedStatement stmt = conn.prepareStatement("INSERT INTO users
Elle est utilisée pour exécuter une requête paramétrée values(?,?)");
stmt.setInt(1, 200); //1 : spécifie le premier paramètre de la requête
• Nom de classe : java.sql.PreparedStatement stmt.setString(2, "Alex"); //2 : spécifie le deuxiéme paramètre de la requête
int i = stmt.executeUpdate();
• Classe mère : java.sql.Statement System.out.println(i+" inséré avec succés");
conn.close();
• Sous-classe directe : java.sql.CallableStatement
• Disponible depuis la version 1.1 du JDK
MME SAMEH HBAIEB-COURS JAVA AVANCEE 31 MME SAMEH HBAIEB-COURS JAVA AVANCEE 32
PreparedStatement: Gestion des paramètres
Paramètrage :
nomstatement.setXXX(rang, valeur)
PATRON POUR LA PERSISTANCE DES
Exemples :
setAsciiStream(), setBigDecimal(), setBinaryStream(), setBoolean(), setByte(),
DONNÉES (DATA ACCESS OBJECT:
setBytes(), setDate(), setDouble(), setFloat(), setInt(), setLong(), setNull(),
setObject(), setShort(), setString(), setTime(), setTimestamp(),
DAO)
setUnicodeStream()
MME SAMEH HBAIEB-COURS JAVA AVANCEE 33 MME SAMEH HBAIEB-COURS JAVA AVANCEE 34
MME SAMEH HBAIEB-COURS JAVA AVANCEE 37 MME SAMEH HBAIEB-COURS JAVA AVANCEE 38
MME SAMEH HBAIEB-COURS JAVA AVANCEE 39 MME SAMEH HBAIEB-COURS JAVA AVANCEE 40
Exemple d’implémentation DAO Exemple d’implémentation DAO
@Override public class DaoPatternDemo {
public void deleteStudent(Student student) { public static void main(String[] args) {
students.remove(student.getRollNo()); StudentDao studentDao = new StudentDaoImpl();
Create concrete class System.out.println("Student: Roll No " + student.getRollNo() + ", deleted Use the StudentDao to //print all students
implementing above interface. from database"); demonstrate DAO pattern usage. for (Student student : studentDao.getAllStudents()) {
} System.out.println("Student: [RollNo : " + student.getRollNo() + ", Name : "
StudentDaoImpl.java //retrive list of students from the database DaoPatternDemo.java + student.getName() + " ]");
@Override }
public List<Student> getAllStudents() { return students; } //update student
@Override Student student =studentDao.getAllStudents().get(0);
public Student getStudent(int rollNo) { return students.get(rollNo); } student.setName("Michael");
@Override studentDao.updateStudent(student);
public void updateStudent(Student student) { //get the student
students.get(student.getRollNo()).setName(student.getName()); studentDao.getStudent(0);
System.out.println("Student: Roll No " + student.getRollNo() + ", updated in System.out.println("Student: [RollNo : " + student.getRollNo() + ", Name : " +
the database"); } } student.getName() + " ]"); }}
MME SAMEH HBAIEB-COURS JAVA AVANCEE 41 MME SAMEH HBAIEB-COURS JAVA AVANCEE 42