Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page...

28
HEG Genève http://www.hesge.ch/heg/ Contenu : Etapes Drivers Statements ResultSet Type de données Estimation temps : Cours : 2 x 45 minutes TP : 120 minutes Cours informatique * Java DataBase Connectivity

Transcript of Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page...

Page 1: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

HEG Genève http://www.hesge.ch/heg/

Contenu : • Etapes • Drivers • Statements • ResultSet • Type de données

Estimation temps :

• Cours : 2 x 45 minutes • TP : 120 minutes

Cours informatique *Java DataBase Connectivity

Page 2: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 2 sur - v01.01

Les grandes étapes

Charger le driver;

Établir la connexion avec le SGBD ciblé;

Facultatif : créer la requête (Statement);

Envoyer la requête (SQL);

Traiter les résultats;

Clore la connexion.

Page 3: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 3 sur - v01.01

Charger le driver

Charger le driver correspondant au SGBD visé;

Chargement explicite : o Class.forName(String className);

Par exemple : o Access:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

o MySQL: Class.forName("com.mysql.jdbc.Driver");

o Oracle: Class.forName("oracle.jdbc.OracleDriver");

Enregistre la classe chargée dans le DriveManager

Exception : o ClassNotFoundException.

Page 4: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 4 sur - v01.01

Abstraction

Abstraction des SGBDR ;

Ensemble d’interfaces (! pas de classes)

o Driver ;

o Connection ;

o Statement ;

o PrepareStatement ;

o ResultSet.

Gestionnaire JDBC

o DriverManager.

Page 5: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 5 sur - v01.01

Implémentation des interfaces

Chaque «interface» a son implémentation particulière ;

Une implémentation spécifique à un SGBD

o PILOTE.

Le pilote est le point d’accès aux SGBD ;

Page 6: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 6 sur - v01.01

Pilotes et gestion

Driver et DriverManager ;

Pilote :

o Driver ;

o Interface : java.sql.Driver

Gestion des pilotes :

o DriverManager ;

o Classe : java.sql.DriverManager

Un pilote peut gérer plusieurs SGBD.

Page 7: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 7 sur - v01.01

Java.sql.Driver

Interface;

Implémentation ;

o Chaque vendeur fourni ses propres implémentations

Intégré dans le cœur de Java

o sun.jdbc.odbc.JdbcOdbcDriver (aussi pour le SGBDR Acces).

Issus d’un vendeur (à importer et à placer dans le projet)

o MySql : com.mysql.jdbc.Driver o Oracle : oracle.jdbc.OracleDriver o PostgreSQL : org.postgersql.Driver

Page 8: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 8 sur - v01.01

Java.sql.Driver

Les classes des Drivers

o Fichiers dans : *.jar

o Placés dans les distributions des SGBD.

Références pilotes :

o http://www.oracle.com/ technetwork/java/index-136695.html

Page 9: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 9 sur - v01.01

Mise en œuvre JDBC

1. Chargement d’un pilote;

2. Création d’une connexion à un SGBD;

3. Création d’une instruction (d’un «statement»);

4. Exécution de la requête dans le SGBD;

5. Présentation et traitement des résultats;

6. Fermeture et relâchement des ressources.

Page 10: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 10 sur - v01.01

Changement d’un pilote

Charger un pilote

o Charger la classe et l’enregistre dans le DriverManager

Utilisation de DriverManager

o Classe : java.sql.DriverManager o Méthodes statiques;

Chargement des drivers

o Implicitement : Instanciation de jdbc.drivers

o Explicitement : Utilisation de la méthode statique forName

Page 11: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 11 sur - v01.01

Initialisation du chargement

Propriétés du système (avant appel à l’API)

o jdbc.drivers = nomDeLaClasseDuDriver

Au moment du démarrage de l’application

o java –Djdbc.drivers = nomDeLaClasse

Pendant l’exécution du programme

try { Class.forName ("nomDeLaClasseDriver"); } catch (ClassNotFoundException e) {…}

Par exemple Class.forName ("com.mysql.jdbc.Driver");

Remarque : le *.jar doit être disponible.

Page 12: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 12 sur - v01.01

Approche forName

La classe est une chaîne de caractère;

Permet de ne pas «hard-coder» le nom du Driver

Possibilité de paramétrer le nom du driver

Page 13: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 13 sur - v01.01

Création d’une connexion

Le DriverManager tente de trouver un driver ;

Résultat : o Récupérer une référence sur un objet Connection o Cet objet Connection est initialisé par le DriverManager

Connection con = DriverManager.getConnection(url, props);

Possibilité d’inclure des arguments par des propriétés

Properties props = new Properties (); props.put ("user", ""); props.put ("passwrod", "");

Typiquement pour les données de sécurité (nom et pswd).

Exception : java.sql.SQLException

Page 14: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 14 sur - v01.01

Exemples de création de connexion

MySQL: props.put("user", "root"); props.put("password", ""); props.put("charSet", "UTF-8");

Connection con = DriverManager.getConnection ("jdbc:mysql://localhost:3306/NomBase", props);

Oracle: props.put("user", "system"); props.put("password", "123");

Connection con = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:NomInstance", props);

Access: props.put("user", "admin"); props.put("password", ""); props.put("charSet", "ISO-8859-1");

Connection con = DriverManager.getConnection ("jdbc:odbc:NomSource", props);

Page 15: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 15 sur - v01.01

Chaîne de connexion

Utilisation d’une chaîne pour l’URL du SGBD

Chaîne de connexion : jdbc:subprotocol:subname

Par exemples :

o MySql : "jdbc:mysql://localhost:3306/NomBase"

o Oracle : "jdbc:oracle:thin:@localhost:1521:NomInstance"

o Access : "jdbc:odbc:NomSource"

Page 16: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 16 sur - v01.01

Interroger un SGBD

Instruction simple o Créée par une connexion; o La requête SQL doit être compilée à chaque fois par le SGBD; o Utilisé lors d’interrogation unique; o java.sql.Statement

Instruction précompilée o Créée par une connexion o La requête est précompilée. Le SGBDR ne fait que l’exécuter,

plus de ressource ni de temps pour la compilation au niveau du SGBD

o Utilisé lors d’interrogations multiple (p.ex. dans une boucle); o java.sql.PreparedStatement

Procédure stockée o Exécuter une procédure au sein du SGBD.

Page 17: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 17 sur - v01.01

Instruction simple

Permet d’interroger un SGBD avec des paramètres o Pour exécuter une requête SQL simple;

C’est la connexion qui fourni une référence sur un objet Statement initialisé

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mabase");

Statement stmt = con.CreateStatement();

Exception : SQLException

Le stmt doit être fermé en fin d’utilisation

La requête n’est pas liée à l’objet Statement, mais est passée en paramètre lors de la demande d’exécution

Page 18: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 18 sur - v01.01

Instruction précompilée Permet d’interroger simplement un SGBD

o Pour exécuter une une requête SQL paramétrée;

Requête paramétrée String sql = "UPDATE employe " + " SET NoDept = ? " + " WHERE NoEmpl = ?";

C’est la connexion qui fourni une référence sur un objet PreparedStatement initialisé

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mabase"); PreparedStatement pstmt = con.prepareStatement(sql);

Passer les paramètres (! typé) : pstmt.setInt (1, 567);// paramètre de NoDept (1er) pstmt.setInt (2, 71); // paramètre de NoEmpl (2ème)

Exception : SQLException Le pstmt doit être fermé en fin d’utilisation

Page 19: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 19 sur - v01.01

SQL et PreparedStatement

La chaîne de caractères de la requête peut inclure des paramètre en les désignant par des «?»;

Il est possible d’en insérer autant que nécessaire;

Chaque paramètre («?») est accessible par sa position (! Le premier ? est sur la position 1 (et non 0));

Pour insérer un valeur, il faut utiliser la méthode set

Les paramètres sont typés : setXYZ (pos, valeur)

o XYZ : String, Int, Date, Boolean, Float, etc.

Page 20: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 20 sur - v01.01

Méthode et PreparedStatement

Exécuter une requête de type lecture (SELECT) pour une requête paramétrée (instruction précompilée). Retourne une référence sur un objet résultat ResultSet

executeQuery (sql)

Exécute une requête d’action sur les enregistrements. Retourne le nombre d’enregistrements affectés par la requête

executeUpdate()

Efface les paramètres d’une requête d’une instruction préparée

clearParametres ()

Exception : SQLException Le stmt ou pstmt doit être fermé en fin d’utilisation.

Page 21: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 21 sur - v01.01

Interrogation du SGBDR

Requête SQL sous forme de chaîne de caractères;

CRUD sur les enregistrements o Création : CREATE; o Lecture : SELECT; o Mise-à-jour : UPDATE; o Suppression : DELETE.

Résultat obtenu dans un objet de classe ResultSet;

Exemple : Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mabase"); Statement stmt = con.CreateStatement();

String sql = "SELECT * FROM departement"; ResultSet rs = stmt.executeQuery (sql);

Page 22: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 22 sur - v01.01

ResultSet

Résultat d’une requête SELECT

Objet modélisant le résultat sous forme d’un tableau o Ligne : enregistrement; o Colonne : champs.

Possibilité de parcours «ligne par ligne» o Chaque ligne peut être considérée comme un tuple.

Les colonne se réfèrent o Par leur position; o Par leur nom.

L’accès aux données se fait par la méthode getXYZ ()

Les valeurs sont typées : getXYZ (pos/nom) o XYZ : String, Int, Date, Boolean, Float, etc.

Page 23: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 23 sur - v01.01

Parcourir un ResultSet

Un ResultSet possède un curseur pointant sur l’enregistrement courant;

Au début, le curseur est positionné AVANT le premier enregistrement (donc pointe sur rien);

Pour se déplacer sur l’enregistrement suivant

next ()

Pour accéder au premier enregistrement, commencer par se positionner par un next () préalable

La méthode next() retourne une valeur booléenne : o true : s’il existe un enregistrement sur la position actuelle; o false : si le curseur à dépassé de dernier enregistrement

Page 24: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 24 sur - v01.01

Les types SQL

Source : http://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/getstart/mapping.html

Page 25: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 25 sur - v01.01

CONCLUSION Synthèse…

Page 26: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 26 sur - v01.01

PARTIE INTERACTIVE Questions - réponses

Page 27: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 27 sur - v01.01

TRAVAIL PRATIQUE Temps : 120 minutes

Page 28: Cours informatique Java DataBase Connectivity · 2016. 2. 24. · Java DataBase Connectivity . page 2 sur - v01.01 johann.sievering@edu.ge.ch Les grandes étapes Charger le driver;

[email protected] page 28 sur - v01.01

FIN DU COURS