Java Database Connectivity

42
Java Database Java Database Connectivity Connectivity Korteby Farouk Cours Java Avancée

description

Fournir un accès homogène aux SGBDRAbstraction des SGBDR cibles Requêtes SQLSimple à mettre en oeuvre

Transcript of Java Database Connectivity

Page 1: Java Database Connectivity

Java Database Java Database ConnectivityConnectivity

Korteby Farouk

Cours Java Avancée

Page 2: Java Database Connectivity

Objectifs

• Fournir un accès homogène aux SGBDR

• Abstraction des SGBDR cibles • Requêtes SQL• Simple à mettre en oeuvre• Core API (1.1)

Page 3: Java Database Connectivity

Fonctionnement

• JDBC interagit avec le SGBDR par un driver

• Il existe des drivers pour Oracle, Sybase, Informix, DB2, ...

• 4 types de drivers :– 1. Bridge ODBC (fourni avec JDBC)– 2. Native-API partly-Java driver– 3. JDBC-Net all-Java driver– 4. Native-protocol all-Java driver

• 1. et 2. nécessite des architectures 3-tiers pour les applets

Page 4: Java Database Connectivity

Drivers JDBC

Application Java

JDBC Driver Manager

JDBC NetDriver JDBC-ODBCBridge driver

Driver A Driver B

Protocole JDBC

Protocole d'accès propriétaire aux SGBRD

Page 5: Java Database Connectivity

Architectures 2-tier et 3-tier

SGBDR

JDBC

Applicationou

Applet

SGBDR

JDBC

Applet FrontendTCP / RMI / CORBA

Architecture 2-tier

Architecture 3-tier

TCP / Protocole propriètaire

Page 6: Java Database Connectivity

Accès aux données

• Charger le driver• Connexion à la base• Création d'un statement• Exécution de la requête• Lecture des résultats

Page 7: Java Database Connectivity

Chargement du driver

• Utiliser la méthode forName de la classe Class :

– Class.forName("sun.jdbc.odbc.JdbcOrdbDriver");

– Class.forName("postgres95.pgDriver");

Page 8: Java Database Connectivity

Connexion à la base (1/2)

• Accès via un URL qui spécifie :– l'utilisation de JDBC– le driver ou le type du SGBDR– l'identification de la base

• Exemple : – jdbc:odbc:ma_base– jdbc:pg95:mabase?

username=toto:password=titi

• Ouverture de la connexion :Connection conn = DriverManager.getConnection(url,

user, password);

Page 9: Java Database Connectivity

Création d'un Statement

• 3 types de statement :– statement : requêtes simples

– prepared statement : requêtes récompilées

– callable statement : procédures stockées

• Création d'un statement :

Statement stmt = conn.createStatement();

Page 10: Java Database Connectivity

Execution d'une requête (1/2)• 3 types d'executions :

– executeQuery : pour les requêtes qui retournent un ResultSet

– executeUpdate : pour les requêtes INSERT, UPDATE, DELETE, CREATE TABLE et DROP TABLE

– execute : pour quelques cas rares (procédures stockées)

Page 11: Java Database Connectivity

Exécution d'une requête (2/2)• Exécution de la requête :

String myQuery = "SELECT prenom, nom, email " + "FROM employe " +"WHERE (nom='Dupont') AND (email IS NOTNULL) " + "ORDER BY nom"; ResultSet rs =

stmt.executeQuery(myQuery);

Page 12: Java Database Connectivity

Lecture des résultats (1/2)• executeQuery() renvoit un ResultSet• Le RS se parcourt itérativement row

par row• Les colonnes sont référencées par leur

numéro ou par leur nom• L'accès aux valeurs des colonnes se

fait par les méthodes getXXX() où XXX représente le type de l'objet

• Pour les très gros row, on peut utiliser des streams.

Page 13: Java Database Connectivity

Lecture des résultats (2/2)java.sql.Statement stmt= conn.createStatement();

ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");

while (rs.next()) { // print the values for the current row. int i = rs.getInt("a"); String s = rs.getString("b"); byte b[] = rs.getBytes("c"); System.out.println("ROW = " + i + " " +

s + " " + b[0]);}

Page 14: Java Database Connectivity

Accès aux méta-données

• La méthode getMetaData() permet d'obtenir les méta- données d'un ResultSet.

• Elle revoit des ResultSetMetaData.• On peut connaitre :

– Le nombre de colonne : getColumnCount() – Le nom d'une colonne : getColumnName(int

col) – Le type d'une colonne : getColumnType(int

col)

– ...

Page 15: Java Database Connectivity

Exemple complet :public class TestJDBC {

public static void main(String[] args) throws Exception {Class.forName("postgres95.pgDriver");Connection conn =

DriverManager.getConnection("jdbc:pg95:mabase", "dedieu", "");

Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * from

employe");

while (rs.next()) {String nom = rs.getString("nom");String prenom = rs.getString("prenom");

String email = rs.getString("email");}

}}

Page 16: Java Database Connectivity

JDBC avec ORACLE

Le driver JDBC OCI :

• implémentation des interfaces JDBC avec des méthodes natives, c pour quoi il est spécifique à une plate-forme:

– Solaris (2.5 et plus), – Windows 9X et WinNT (et plus)

Page 17: Java Database Connectivity

JDBC avec ORACLE

Le driver JDBC ThinIl utilise directement les Sockets

Java pour se connecter directement à la base .

Le driver est entièrement écrit en Java, c'est pour cette raison qu'il est complètement indépendant de la plate-forme.

Page 18: Java Database Connectivity

JDBC avec ORACLE

Utilisation du driver OCI // chargement du Oracle driverDriverManager.registerDriver (new

oracle.jdbc.driver.OracleDriver());// Connexion au BD localConnection conn =

DriverManager.getConnection ("jdbc:oracle:oci8:@mydatabase"("jdbc:oracle:oci8:@mydatabase", "scott", "tiger");, "scott", "tiger");

Page 19: Java Database Connectivity

JDBC avec ORACLE

Ou:

• oci8: Type de driver de oci8: Type de driver de connexionconnexion

• mydatabase: nom de ma BDmydatabase: nom de ma BD• scott: nom d’utilisateurscott: nom d’utilisateur• tiger: mot de passetiger: mot de passe

Page 20: Java Database Connectivity

JDBC avec ORACLE

Utilisation du driver Thin // Load Oracle driverDriverManager.registerDriver (new

oracle.jdbc.driver.OracleDriver()); // Connect to the local database

Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@myhost:15("jdbc:oracle:thin:@myhost:1521: orcl", "scott", "tiger");21: orcl", "scott", "tiger");

Page 21: Java Database Connectivity

JDBC avec ORACLE

Ou:

• thin: Type de driver de thin: Type de driver de connexionconnexion

• myhost: nom de la machinemyhost: nom de la machine • 1521: le port1521: le port • orcl : System Identifierorcl : System Identifier • scott : nom d’utilisateurscott : nom d’utilisateur• tiger : mot de passetiger : mot de passe

Page 22: Java Database Connectivity

AteliersAteliers

Korteby Farouk

Cours Java Avancée

Page 23: Java Database Connectivity

AteliersAteliers

Tp TestJDBC: un teste de connexion via ODBC a une base de données MSAccess

1- Création de la BD Access2- Création de l’Alias ODBC3- Implémentation de la classe

TestJDBC.java4- Teste de l’application

Page 24: Java Database Connectivity

AteliersAteliers

1- Création de la BD AccessFichier: books.mdbBD: booksTable: booksChamps:

id auto increment -clé-title Texte 50

Page 25: Java Database Connectivity

AteliersAteliers

Page 26: Java Database Connectivity

AteliersAteliers

2- Création de l’Alias ODBC

Poste de travail->Panneau de configuration->Outils d’administration ->Sources de données (ODBC)

Page 27: Java Database Connectivity

AteliersAteliers->Ajouter->Driver MS Acces *.mdb->Terminer:Nom alias: BiblioPuis sélectionner votre fichier books.mdb

Page 28: Java Database Connectivity

AteliersAteliers3- Implémentation de la classe TestJDBC.java dans

main(String[ ] args) throws Exception: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:Biblio"; Connection cnt = DriverManager.getConnection(url); Statement stt = cnt.createStatement(); ResultSet rs = stt.executeQuery("SELECT * FROM

books"); while (rs.next()) { String title = rs.getString("title"); String id = rs.getString(1); System.out.println(title + " : " + id); }stt.close();cnt.close();

Page 29: Java Database Connectivity

AteliersAteliers

4- Teste de l’application->Build->executer

Page 30: Java Database Connectivity

AteliersAteliers

Tp WebApplication_jdbc_mysql: connexion d’une BD mysql avec le driver j/connection

1- Installation de Mysql (easyphp) et on crée la même BD books

2- Importation des driver jdbc/mysql3- Implémentation de la Servlet

DBServlet.java4- Teste de l’application

Page 31: Java Database Connectivity

AteliersAteliers

1- Installation de Mysql (easyphp) et on crée la même BD books

Page 32: Java Database Connectivity

AteliersAteliers

2- Importation des driver jdbc/mysql

Page 33: Java Database Connectivity

AteliersAteliers

2- Importation des driver jdbc/mysql

Page 34: Java Database Connectivity

AteliersAteliers

2- Importation des driver jdbc/mysql

Page 35: Java Database Connectivity

AteliersAteliers

2- Importation des driver jdbc/mysql

Page 36: Java Database Connectivity

AteliersAteliers

3- Implémentation de la Servlet DBServlet.java

import java.io.*;import java.sql.*;import javax.servlet.*;import javax.servlet.http.*;

private Connection con; private PrintWriter out;

Page 37: Java Database Connectivity

AteliersAteliers

3- Implémentation de la Servlet DBServlet.java

Dans public void init(ServletConfig conf) throws ServletException

tryClass.forName("com.mysql.jdbc.Driver");

con =DriverManager.getConnection("jdbc:mysql://localhost:3306/books",

"root", "");catch(Exception e)

Page 38: Java Database Connectivity

AteliersAteliers

3- Implémentation de la Servlet DBServlet.java

public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException

Page 39: Java Database Connectivity

AteliersAteliers3- Implémentation de la Servlet DBServlet.javaDans serviceout = res.getWriter(); Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM

books");out.println("<UL>"); while(rs.next()) { out.println("<LI>" + rs.getString("titre")); }out.println("</UL>");rs.close();stmt.close();

Page 40: Java Database Connectivity

AteliersAteliers

Index.jsp

<form action="DBServlet"> <input type="submit"

value=“tester" /> </form>

Page 41: Java Database Connectivity

AteliersAteliers

4- Teste de l’application

Page 42: Java Database Connectivity

Merci de votre AttentionMerci de votre Attention

By Korteby Farouk

Cours Java Avancée