Java Database Connectivity
-
Upload
korteby-farouk -
Category
Technology
-
view
1.419 -
download
1
description
Transcript of Java Database Connectivity
Java Database Java Database ConnectivityConnectivity
Korteby Farouk
Cours Java Avancée
Objectifs
• Fournir un accès homogène aux SGBDR
• Abstraction des SGBDR cibles • Requêtes SQL• Simple à mettre en oeuvre• Core API (1.1)
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
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
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
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
Chargement du driver
• Utiliser la méthode forName de la classe Class :
– Class.forName("sun.jdbc.odbc.JdbcOrdbDriver");
– Class.forName("postgres95.pgDriver");
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);
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();
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)
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);
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.
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]);}
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)
– ...
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");}
}}
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)
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.
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");
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
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");
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
AteliersAteliers
Korteby Farouk
Cours Java Avancée
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
AteliersAteliers
1- Création de la BD AccessFichier: books.mdbBD: booksTable: booksChamps:
id auto increment -clé-title Texte 50
AteliersAteliers
AteliersAteliers
2- Création de l’Alias ODBC
Poste de travail->Panneau de configuration->Outils d’administration ->Sources de données (ODBC)
AteliersAteliers->Ajouter->Driver MS Acces *.mdb->Terminer:Nom alias: BiblioPuis sélectionner votre fichier books.mdb
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();
AteliersAteliers
4- Teste de l’application->Build->executer
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
AteliersAteliers
1- Installation de Mysql (easyphp) et on crée la même BD books
AteliersAteliers
2- Importation des driver jdbc/mysql
AteliersAteliers
2- Importation des driver jdbc/mysql
AteliersAteliers
2- Importation des driver jdbc/mysql
AteliersAteliers
2- Importation des driver jdbc/mysql
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;
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)
AteliersAteliers
3- Implémentation de la Servlet DBServlet.java
public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
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();
AteliersAteliers
Index.jsp
<form action="DBServlet"> <input type="submit"
value=“tester" /> </form>
AteliersAteliers
4- Teste de l’application
Merci de votre AttentionMerci de votre Attention
By Korteby Farouk
Cours Java Avancée