Java Database Connectivity

1,784 views

Published on

Fournir un accès homogène aux SGBDR
Abstraction des SGBDR cibles
Requêtes SQL
Simple à mettre en oeuvre

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,784
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
180
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Java Database Connectivity

  1. 1. Java Database Connectivity Korteby Farouk Cours Java Avancée
  2. 2. Objectifs <ul><li>Fournir un accès homogène aux SGBDR </li></ul><ul><li>Abstraction des SGBDR cibles </li></ul><ul><li>Requêtes SQL </li></ul><ul><li>Simple à mettre en oeuvre </li></ul><ul><li>Core API (1.1) </li></ul>
  3. 3. Fonctionnement <ul><li>JDBC interagit avec le SGBDR par un driver </li></ul><ul><li>Il existe des drivers pour Oracle, Sybase, Informix, DB2, ... </li></ul><ul><li>4 types de drivers : </li></ul><ul><ul><li>1. Bridge ODBC (fourni avec JDBC) </li></ul></ul><ul><ul><li>2. Native-API partly-Java driver </li></ul></ul><ul><ul><li>3. JDBC-Net all-Java driver </li></ul></ul><ul><ul><li>4. Native-protocol all-Java driver </li></ul></ul><ul><li>1. et 2. nécessite des architectures 3-tiers pour les applets </li></ul>
  4. 4. Drivers JDBC Application Java JDBC Driver Manager JDBC NetDriver JDBC-ODBC Bridge driver Driver A Driver B Protocole JDBC Protocole d'accès propriétaire aux SGBRD
  5. 5. Architectures 2-tier et 3-tier SGBDR J D B C Application ou Applet SGBDR J D B C Applet Frontend TCP / RMI / CORBA Architecture 2-tier Architecture 3-tier TCP / Protocole propriètaire
  6. 6. Accès aux données <ul><li>Charger le driver </li></ul><ul><li>Connexion à la base </li></ul><ul><li>Création d'un statement </li></ul><ul><li>Exécution de la requête </li></ul><ul><li>Lecture des résultats </li></ul>
  7. 7. Chargement du driver <ul><li>Utiliser la méthode forName de la classe Class : </li></ul><ul><ul><li>Class.forName (&quot;sun.jdbc.odbc.JdbcOrdbDriver&quot;); </li></ul></ul><ul><ul><li>Class.forName (&quot;postgres95.pgDriver&quot;); </li></ul></ul>
  8. 8. Connexion à la base (1/2) <ul><li>Accès via un URL qui spécifie : </li></ul><ul><ul><li>l'utilisation de JDBC </li></ul></ul><ul><ul><li>le driver ou le type du SGBDR </li></ul></ul><ul><ul><li>l'identification de la base </li></ul></ul><ul><li>Exemple : </li></ul><ul><ul><li>jdbc:odbc:ma_base </li></ul></ul><ul><ul><li>jdbc:pg95:mabase?username=toto:password=titi </li></ul></ul><ul><li>Ouverture de la connexion : </li></ul><ul><li>Connection conn = DriverManager.getConnection (url, user, password); </li></ul>
  9. 9. Création d'un Statement <ul><li>3 types de statement : </li></ul><ul><ul><li>statement : requêtes simples </li></ul></ul><ul><ul><li>prepared statement : requêtes récompilées </li></ul></ul><ul><ul><li>callable statement : procédures stockées </li></ul></ul><ul><li>Création d'un statement : </li></ul><ul><li>Statement stmt = conn. createStatement (); </li></ul>
  10. 10. Execution d'une requête (1/2) <ul><li>3 types d'executions : </li></ul><ul><ul><li>executeQuery : pour les requêtes qui retournent un ResultSet </li></ul></ul><ul><ul><li>executeUpdate : pour les requêtes INSERT , UPDATE , DELETE , CREATE TABLE et DROP TABLE </li></ul></ul><ul><ul><li>execute : pour quelques cas rares (procédures stockées) </li></ul></ul>
  11. 11. Exécution d'une requête (2/2) <ul><li>Exécution de la requête : </li></ul><ul><li>String myQuery = &quot;SELECT prenom, nom, </li></ul><ul><li>email &quot; + &quot;FROM employe &quot; + </li></ul><ul><li>&quot;WHERE (nom='Dupont') AND (email IS NOT </li></ul><ul><li>NULL) &quot; + &quot;ORDER BY nom&quot;; </li></ul><ul><li>ResultSet rs = stmt. executeQuery (myQuery); </li></ul>
  12. 12. Lecture des résultats (1/2) <ul><li>executeQuery () renvoit un ResultSet </li></ul><ul><li>Le RS se parcourt itérativement row par row </li></ul><ul><li>Les colonnes sont référencées par leur numéro ou par leur nom </li></ul><ul><li>L'accès aux valeurs des colonnes se fait par les méthodes getXXX() où XXX représente le type de l'objet </li></ul><ul><li>Pour les très gros row , on peut utiliser des streams . </li></ul>
  13. 13. Lecture des résultats (2/2) <ul><li>java.sql.Statement stmt= conn.createStatement(); </li></ul><ul><li>ResultSet rs = stmt.executeQuery(&quot;SELECT a, b, c FROM Table1&quot;); </li></ul><ul><li>while (rs.next()) </li></ul><ul><li>{ </li></ul><ul><li>// print the values for the current row. </li></ul><ul><li>int i = rs.getInt(&quot;a&quot;); </li></ul><ul><li>String s = rs.getString(&quot;b&quot;); </li></ul><ul><li>byte b[] = rs.getBytes(&quot;c&quot;); </li></ul><ul><li>System.out.println(&quot;ROW = &quot; + i + &quot; &quot; + s + &quot; &quot; + b[0]); </li></ul><ul><li>} </li></ul>
  14. 14. Accès aux méta-données <ul><li>La méthode getMetaData() permet d'obtenir les méta- données d'un ResultSet . </li></ul><ul><li>Elle revoit des ResultSetMetaData . </li></ul><ul><li>On peut connaitre : </li></ul><ul><ul><li>Le nombre de colonne : getColumnCount() </li></ul></ul><ul><ul><li>Le nom d'une colonne : getColumnName(int col) </li></ul></ul><ul><ul><li>Le type d'une colonne : getColumnType(int col) </li></ul></ul><ul><ul><li>... </li></ul></ul>
  15. 15. Exemple complet : <ul><li>public class TestJDBC { </li></ul><ul><li>public static void main(String[] args) throws Exception { </li></ul><ul><li>Class.forName (&quot;postgres95.pgDriver&quot;); </li></ul><ul><li>Connection conn = </li></ul><ul><li>DriverManager.getConnection (&quot;jdbc:pg95:mabase&quot;, &quot;dedieu&quot;, &quot;&quot;); </li></ul><ul><li>Statement stmt = conn.createStatement (); </li></ul><ul><li>ResultSet rs = stmt.executeQuery (&quot;SELECT * from employe&quot;); </li></ul><ul><li>while (rs.next()) { </li></ul><ul><li>String nom = rs.getString(&quot;nom&quot;); </li></ul><ul><li>String prenom = rs.getString(&quot;prenom&quot;); </li></ul><ul><li>String email = rs.getString(&quot;email&quot;); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  16. 16. JDBC avec ORACLE <ul><li>Le driver JDBC OCI : </li></ul><ul><li>implémentation des interfaces JDBC avec des méthodes natives, c pour quoi il est spécifique à une plate-forme: </li></ul><ul><ul><li>Solaris (2.5 et plus), </li></ul></ul><ul><ul><li>Windows 9X et WinNT (et plus) </li></ul></ul>
  17. 17. JDBC avec ORACLE <ul><li>Le driver JDBC Thin </li></ul><ul><li>Il utilise directement les Sockets Java pour se connecter directement à la base . </li></ul><ul><li>Le driver est entièrement écrit en Java, c'est pour cette raison qu'il est complètement indépendant de la plate-forme. </li></ul>
  18. 18. JDBC avec ORACLE <ul><li>Utilisation du driver OCI </li></ul><ul><li>// chargement du Oracle driver </li></ul><ul><li>DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver()); </li></ul><ul><li>// Connexion au BD local </li></ul><ul><li>Connection conn = DriverManager.getConnection (&quot;jdbc:oracle:oci8:@mydatabase&quot;, &quot;scott&quot;, &quot;tiger&quot;); </li></ul>
  19. 19. JDBC avec ORACLE <ul><li>Ou: </li></ul><ul><li>oci8: Type de driver de connexion </li></ul><ul><li>mydatabase: nom de ma BD </li></ul><ul><li>scott: nom d’utilisateur </li></ul><ul><li>tiger: mot de passe </li></ul>
  20. 20. JDBC avec ORACLE <ul><li>Utilisation du driver Thin </li></ul><ul><li>  // Load Oracle driver </li></ul><ul><li>DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver()); </li></ul><ul><li>// Connect to the local database Connection conn = DriverManager.getConnection (&quot;jdbc:oracle:thin:@myhost:1521: orcl&quot;, &quot;scott&quot;, &quot;tiger&quot;); </li></ul>
  21. 21. JDBC avec ORACLE <ul><li>Ou: </li></ul><ul><li>thin: Type de driver de connexion </li></ul><ul><li>myhost: nom de la machine </li></ul><ul><li>1521: le port </li></ul><ul><li>orcl : System Identifier </li></ul><ul><li>scott : nom d’utilisateur </li></ul><ul><li>tiger : mot de passe </li></ul>
  22. 22. Ateliers Korteby Farouk Cours Java Avancée
  23. 23. Ateliers <ul><li>Tp TestJDBC: un teste de connexion via ODBC a une base de données MSAccess </li></ul><ul><li>1- Création de la BD Access </li></ul><ul><li>2- Création de l’Alias ODBC </li></ul><ul><li>3- Implémentation de la classe TestJDBC.java </li></ul><ul><li>4- Teste de l’application </li></ul>
  24. 24. Ateliers <ul><li>1- Création de la BD Access </li></ul><ul><li>Fichier : books.mdb </li></ul><ul><li>BD : books </li></ul><ul><li>Table : books </li></ul><ul><li>Champs : </li></ul><ul><li>id auto increment -clé- </li></ul><ul><li>title Texte 50 </li></ul>
  25. 25. Ateliers
  26. 26. Ateliers <ul><li>2- Création de l’Alias ODBC </li></ul><ul><li>Poste de travail->Panneau de configuration->Outils d’administration ->Sources de données (ODBC) </li></ul>
  27. 27. Ateliers <ul><li>->Ajouter->Driver MS Acces *.mdb->Terminer: </li></ul><ul><li>Nom alias: Biblio </li></ul><ul><li>Puis sélectionner votre fichier books.mdb </li></ul>
  28. 28. Ateliers <ul><li>3- Implémentation de la classe TestJDBC.java dans main(String[ ] args) throws Exception : </li></ul><ul><li>Class.forName (&quot;sun.jdbc.odbc.JdbcOdbcDriver&quot;); </li></ul><ul><li>String url = &quot;jdbc:odbc:Biblio&quot;; </li></ul><ul><li>Connection cnt = DriverManager.getConnection(url); </li></ul><ul><li>Statement stt = cnt.createStatement(); </li></ul><ul><li>ResultSet rs = stt.executeQuery(&quot;SELECT * FROM books&quot;); </li></ul><ul><li>while (rs.next()) { </li></ul><ul><li>String title = rs.getString(&quot;title&quot;); </li></ul><ul><li>String id = rs.getString(1); </li></ul><ul><li>System.out.println(title + &quot; : &quot; + id); </li></ul><ul><li>} </li></ul><ul><li>stt.close(); </li></ul><ul><li>cnt.close(); </li></ul>
  29. 29. Ateliers <ul><li>4- Teste de l’application </li></ul><ul><li>->Build->executer </li></ul>
  30. 30. Ateliers <ul><li>Tp WebApplication_jdbc_mysql: connexion d’une BD mysql avec le driver j/connection </li></ul><ul><li>1- Installation de Mysql (easyphp) et on crée la même BD books </li></ul><ul><li>2- Importation des driver jdbc/mysql </li></ul><ul><li>3- Implémentation de la Servlet DBServlet.java </li></ul><ul><li>4- Teste de l’application </li></ul>
  31. 31. Ateliers <ul><li>1- Installation de Mysql (easyphp) et on crée la même BD books </li></ul>
  32. 32. Ateliers <ul><li>2- Importation des driver jdbc/mysql </li></ul>
  33. 33. Ateliers <ul><li>2- Importation des driver jdbc/mysql </li></ul>
  34. 34. Ateliers <ul><li>2- Importation des driver jdbc/mysql </li></ul>
  35. 35. Ateliers <ul><li>2- Importation des driver jdbc/mysql </li></ul>
  36. 36. Ateliers <ul><li>3- Implémentation de la Servlet DBServlet.java </li></ul><ul><li>import java.io.*; </li></ul><ul><li>import java.sql.*; </li></ul><ul><li>import javax.servlet.*; </li></ul><ul><li>import javax.servlet.http.*; </li></ul><ul><li>private Connection con; </li></ul><ul><li>private PrintWriter out; </li></ul>
  37. 37. Ateliers <ul><li>3- Implémentation de la Servlet DBServlet.java </li></ul><ul><li>Dans public void init(ServletConfig conf) throws ServletException </li></ul><ul><li>try </li></ul><ul><li>Class.forName(&quot;com.mysql.jdbc.Driver&quot;); </li></ul><ul><li>con =DriverManager.getConnection </li></ul><ul><li>(&quot;jdbc:mysql://localhost:3306/books&quot;, &quot;root&quot;, &quot;&quot;); </li></ul><ul><li>catch(Exception e) </li></ul>
  38. 38. Ateliers <ul><li>3- Implémentation de la Servlet DBServlet.java </li></ul><ul><li>public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException </li></ul>
  39. 39. Ateliers <ul><li>3- Implémentation de la Servlet DBServlet.java </li></ul><ul><li>Dans service </li></ul><ul><li>out = res.getWriter(); </li></ul><ul><li>Statement stmt = con.createStatement(); </li></ul><ul><li>ResultSet rs = stmt.executeQuery(&quot;SELECT * FROM books&quot;); </li></ul><ul><li>out.println(&quot;<UL>&quot;); </li></ul><ul><li>while(rs.next()) </li></ul><ul><li>{ </li></ul><ul><li>out.println(&quot;<LI>&quot; + rs.getString(&quot;titre&quot;)); </li></ul><ul><li>} </li></ul><ul><li>out.println(&quot;</UL>&quot;); </li></ul><ul><li>rs.close(); </li></ul><ul><li>stmt.close(); </li></ul>
  40. 40. Ateliers <ul><li>Index.jsp </li></ul><ul><li><form action=&quot;DBServlet&quot;> </li></ul><ul><li><input type=&quot;submit&quot; value=“tester&quot; /> </li></ul><ul><li></form> </li></ul>
  41. 41. Ateliers <ul><li>4- Teste de l’application </li></ul>
  42. 42. Merci de votre Attention By Korteby Farouk Cours Java Avancée

×