JDBC - Y. Bekkers1 Java et les SGBDR Librairies JDBC Yves Bekkers.

Slides:



Advertisements
Présentations similaires
Réaliser en Java un programme client d’une Base de Données
Advertisements

Introduction Fonctionnement PluginsConfigurationLes données Le framework MAG Framework de conception de canaux complexes Implémente IChannel Possède son.
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
MySQL I / Présentation. II / Administration et Outils.
Approfondissement du langage
(Classes prédéfinies – API Java)
51 Les technologies XML Cours 6 : XML et les architectures N-tiers – Tier Métier Janvier Version 1.0 -
C.
Programmer en JAVA par Tama
MySQL et PHP.
Les Bases de données et le Web
JAV - TD 6 Structures de données JAVA
Stéphane Frenot - Département Télécommunication - SID - II - Jdbc 280 JDBC Java Databases Connectivity.
PHP mySQL Extension php_mysql. Connexion à une base de données Établir une connexion mysql_connect(string server, string username, string password) –permet.
UV JDBC Module Java Expert
TP 3-4 BD21.
Programmation dapplications Bases de données avec Java INT.
JDBC: manipuler une base de données en Java IFT6800 – E 2007 Jian-Yun Nie.
Connexion base de données
Faculté I&C, Claude Petitpierre, André Maurer Bases de données Javascript – SQL - LemanOS.
Développement d’applications web
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Faculté I&C, Claude Petitpierre, André Maurer Bases de données SQL (Structured Query Language)
Middleware : XML-DBMS Permet de faire office d’interface entre des données XML et des bases de données relationnelles (insertion et récupération de données)
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
JDBC Java Data Base Connectivity. Java DataBase Connectivity (JDBC) Cette API est développée par Sun en collaboration avec les grands éditeurs de SGBD.
1 Développement des Applications des Bases de Données Chapitre 6.
Les exceptions. Quest ce quune exception ? Une erreur dans le programme Due à un bug ou un cas « anormal » Gestion complète en java : JVM Dans dautre.
JDBC ou comment manipuler une base de données en Java ?
Les instructions PHP pour l'accès à une base de données MySql
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
L’utilisation des bases de données
Introduction à la programmation (Java)
Langage Oriente Objet Cours 2.
Présentation Structures de Données et TDA
1 Développement des Applications des Bases de Données Chapitre 6.
1 PHP 1.Langage PHP 1.1. Types de base, variables et constantes 1.2. Opérateurs et expressions 1.3. Instructions 1.4. Fonctions 2.Accès aux bases de données:
MySQL Création des sites dynamiques
COURS DE PROGRAMMATION ORIENTEE OBJET :
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Développement des Applications des Bases de Données Chapitre 6.
Christine Bonnet SOURCES : « Samples » dOracle, « Oracle 8 » R. Chapuis PRO*C – C ++
CPI/BTS 2 Programmation Web PHP et les Bases de données Prog Web CPI/BTS2 – M. Dravet – 11/03/2004 Dernière modification: 11/03/2004.
‘‘Open Data base Connectivity‘‘
Juin 2006~ Brigitte Groléas ~ 1 J530 (JBD) Java : Base de Données.
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Programmation objet La base.
Chapitre 6.2 Les curseurs Cours SGBD 3A Mme hkimi Jihène
Créer des packages.
Masters IIGLI et ILGII – Intranet internet extranet – – Claude Montacié 1 Cours n° 10 Accès distant aux bases de données.
Tutorat en bio-informatique
Schéma de conception Factory Method Exemple Sylvain Giroux.
Master 1 SIGLIS Intégration des données dans l’entreprise Stéphane Tallard JDBC: Java Database Connectivity Master 1 SIGLIS1JDBC.
6ième Classe (Mercredi, 17 novembre) CSI2572
Initiation au web dynamique Licence Professionnelle.
3 Copyright © Oracle Corporation, Tous droits réservés. Créer des fonctions.
Cours n°4M1.ist-ie (S. Sidhom) UE 203 Promo. M1 IST-IE 2006/07 Conception d’un système d'information sur Internet Architecture trois-tiers : technologies.
JDBC - p. 1 JDBC. JDBC - p. 2 Objectifs Fournir un accès homogène aux SGBDR Abstraction des SGBDR cibles Requêtes SQL Simple à mettre en oeuvre Core API.
02/06/2015© Robert Godin. Tous droits réservés.1 5 Interface entre SQL et un programme n SQL incomplet n Défaut d'impédance (impedance mismatch) – modèle.
Interface Java – Oracle : JDBC. I-2 JDBC (Java DataBase Connectivity) : interface API (Application Programming Interface) qui permet d’exécuter des ordres.
JDBC Présenter par: Mouctar Souleymane Bah Enseignent: Dr Amer Draâ
Les bases de données Séance 8 Jointures.
JDBC (Complément de cours) IFT 3030
Séance /10/2004 SGBD - Approches & Principes.
Bases de données Singleton pour la connexion
L. Gurret – M. Herve – P. Mignon – J. Prarioz. Introduction  Dernière étape d’analyse  Cahier des charges, spécifications et conception orientée objet.
Initiation aux bases de données et à la programmation événementielle
Cours n°2 Implémentation et exploitation
APP-TSWD Apprentissage Par Problèmes Techniques des Sites Web Dynamiques Licence Professionnelle FNEPI Valérie Bellynck, Benjamin Brichet-Billet, Mazen.
1 Les bases de données Séance 5 -- Le Langage de Définition de Données ou la manœuvre de la structure de la base -- Le Langage de Manœuvre de Données.
Transcription de la présentation:

JDBC - Y. Bekkers1 Java et les SGBDR Librairies JDBC Yves Bekkers

JDBC - Y. Bekkers2 Plan Bases de données, interface JDBC –Introduction, concepts –Pilote et gestionnaire de pilotes Interface java.sql.Driver Le cas d'ODBC –Accès aux données Charger un pilote Créer une connexion à la base Créer une requète (Statement) Exécuter une requête Présenter les résultats –Accès aux méta-données –Traiter les erreurs

JDBC - Y. Bekkers3 Introduction - concepts

JDBC - Y. Bekkers4 Librairies JDBC JDBC : Java DataBase Connectivity Qui : Sun Quoi : deux librairies (accessibles dans Java 1.4) –java.sql : JDBC 2.0 Core API –javax.sql : JDBC 2.0 Optional Package API Objectif : –Accéder aux SGBD à l'aide de requètes SQL –Récupérer les résultats en Java –Le type de la base est transparent (Sybase, Oracle, MySql, Access …) généricité, standardisation

JDBC - Y. Bekkers5 JDBC Généricité - standardisation Abstraction des SGBDRs : –JDBC définit un ensemble d'interfaces Driver, Connection, Statement, ResultSet … –JDBC définit une classe : DriverManager Implementations : Chaque base particulière possède son implémentation des interfaces : c'est la notion de "pilote"

JDBC - Y. Bekkers6 Pilote et gestionnaire de pilotes "Driver et driver manager"

JDBC - Y. Bekkers7 Pilotes ( Drivers ) et gestionnaire de pilotes ( DriverManager ) Classe java.sql.DriverManager : –Le gestionnaire de pilotes offert par la JVM Interface java.sql.Driver –Définit le point d'entrée de tout accès à une base DriverManager Driver1Driver2DriverN SGBD1SGBD2SGBDN

JDBC - Y. Bekkers8 Un même driver peut piloter plusieurs bases

JDBC - Y. Bekkers9 Interface java.sql.Driver Chaque vendeur fournit une implémentation –Certaines sont fournis avec le Java core Accès à ODBC sun.jdbc.odbc.JdbcOdbcDriver –Les autres doivent être importées postGresql : org.postgresql.Driver Généralement on trouve ces classes dans des fichiers jar dans les distributions du constructeur Dans le pire des cas : –On peut trouver une liste de plus de 160 pilotes à

JDBC - Y. Bekkers10 Le cas d'ODBC

JDBC - Y. Bekkers11 Accès à une base MS Access Passerelle Jdbc:odbc gestionnaire de données ODBC32

JDBC - Y. Bekkers12 Administration des liens ODBC sous Windows 2000 (1) Outils d'administration (panneau de configuration)

JDBC - Y. Bekkers13 Administration des liens ODBC sous Windows 2000 (2) Source odbc (sous outils d'administration)

JDBC - Y. Bekkers14 Administration des liens ODBC sous Windows 2000 (3) fichier Access –Onglet données fichier –Type "MS Access" –Configurer

JDBC - Y. Bekkers15 Administration des liens ODBC sous Windows 2000 (4) fichier Access –Nom donnée au lien –Emplacement du fichier –Confirmer

JDBC - Y. Bekkers16 Accès aux données

JDBC - Y. Bekkers17 Accès aux données - 5 étapes 1.Charger un pilote 2.Créer une connexion à la base 3.Créer une requète (Statement) 4.Exécuter une requête 5.Présenter les résultats

JDBC - Y. Bekkers18 Première étape "charger un pilote"

JDBC - Y. Bekkers19 Charger un pilote Classe java.sql.DriverManager –Fournit les utilitaires de gestion des connexions et des pilotes –Elle ne contient que des méthodes statiques Les pilotes sont chargés dynamiquement –implicitement en instanciant la "system property" jdbc.drivers –explicitement par la méthode statique forName() de la classe Class (voir ci-après)

JDBC - Y. Bekkers20 Conventions à propos du chargement des pilotes Classe DriverManager –Elle inspecte la propriété système jdbc.drivers au moment de son instanciation Classes implémentant l'interface Driver –elles doivent s'enregistrer d'elles mêmes au près du DriverManager au moment de leur instanciation

JDBC - Y. Bekkers21 Exemples de chargement Initialisation avant appel de l'API jdbc.drivers=nom-de-classe-Driver Initialisation au moment de l'appel de l'API java -Djdbc.drivers=nom-de-classe Initialisation dans le programme try { Class.forName("nom-de-classe"); } catch(ClassNotFoundException ex) {...}

JDBC - Y. Bekkers22 Remarques L'utilisation de propriétés (systèmes ou privées à l'API) permet de ne pas "cabler" le nom de classes dans le code java La propriété jdbc.drivers peut contenir plusieurs noms complets de classes, il suffit de séparer les noms par des caractères " : " Exemple: –foo.bah.Driver:wombat.sql.Driver nom1nom2

JDBC - Y. Bekkers23 Seconde étape "Créer une connexion à la base"

JDBC - Y. Bekkers24 Classe java.sql.Connection Demande de connexion –méthode statique getConnection(String ) classe DriverManager Le driver manager essaye de trouver un driver approprié d'après la chaîne passée en paramètre Structure de la chaîne décrivant la connexion jdbc:protocole:URL Exemples jdbc:odbc:epicerie jdbc:mysql://athens.imaginaire.com:4333/db

JDBC - Y. Bekkers25 Classe java.sql.Connection (suite) Connexion sans information de sécurité Connection con = DriverManager.getConnection ("jdbc:odbc:epicerie"); Connexion avec informations de sécurité Connection con = DriverManager.getConnection ("jdbc:odbc:epicerie", user, password); Dans tous les cas faut récupérer l'exception java.sql.SQLException

JDBC - Y. Bekkers26 Troisième étape "Créer une requète"

JDBC - Y. Bekkers27 Trois types de requètes Requètes simples –java.sql.Statement Requètes Précompilées –java.sql.PreparedStatement –Pour une opération réalisée à plusieurs reprises Procédures stockées –java.sql.CallableStatement –Pour lancer une procédure du SGBD

JDBC - Y. Bekkers28 Héritage entre interfaces requètes Statement PreparedStatement CallableStatement

JDBC - Y. Bekkers29 Interface java.sql.Statement C'est le type d'objet –pour exécuter une requète SQL simple –pour recevoir ses résultats Exemple de création Connection con = DriverManager.getConnection ("jdbc:odbc:epicerie"); Statement stmt = con.createStatement();

JDBC - Y. Bekkers30 Statement La réquete sql n’est pas liée à l’objet Statement Initialisation Connection con = getConnection(); Statement stmt = con.createStatement(); Exécuter une requête String sql = "SELECT * FROM fournisseur"; ResultSet rs = stmt.executeQuery(sql);

JDBC - Y. Bekkers31 PreparedStatement La réquete sql est liée à l’objet PreparedStatement Requètes paramétrées String s = "UPDATE EMPLOYEES" + " SET SALARY = ? WHERE ID = ?" PreparedStatement pstmt = con.prepareStatement(s); pstmt.setBigDecimal(1, ); pstmt.setInt(2, );

JDBC - Y. Bekkers32 Quatrième étape "Exécuter une requête"

JDBC - Y. Bekkers33 Interrogation de la base Instruction SQL « select » String sql = "SELECT * FROM fournisseur"; ResultSet rs = stmt.executeQuery(sql);

JDBC - Y. Bekkers34 Mise à jour : effacer une table Instruction SQL « drop table » Statement stmt = con.createStatement(); int i = stmt.executeUpdate( "drop table fournisseur");

JDBC - Y. Bekkers35 Statement - Deux types d'exécution Requètes " select " retournant un tableau Statement stmt = con.createStatement(); String sql = "SELECT * FROM fournisseur"; ResultSet rs = stmt.executeQuery(sql); Requètes de mise à jour et de création Statement stmt = conn.createStatement(); String sql = "INSERT INTO Customers " + "VALUES (1001, 'Simpson', 'Mr.', " + "'Springfield', 2001)"; int i = stmt.executeUpdate(sql);

JDBC - Y. Bekkers36 executeQuery () Pour lancer une requète " SELECT " statique Statement stmt = con.createStatement(); String s = "select * from employes"; ResultSet rs = stmt.executeQuery(s); Un ResultSet est un objet qui modélise un tableau à deux dimensions –Lignes (row) –Colonnes (valeurs d'attributs)

JDBC - Y. Bekkers37 executeUpdate () - 1 INSERT INTO Pour lancer une requète INSERT Statement stmt = con.createStatement(); String s = "INSERT INTO test (code,val)" + "VALUES(" + valCode + ", '" +val +"')"; int i = stmt.executeUpdate(s); Le résultat est un entier donnant le nombre de lignes créées

JDBC - Y. Bekkers38 executeUpdate () - 2 UPDATE Pour lancer une requète UPDATE Statement stmt = con.createStatement(); String s = "UPDATE table SET column = expression WHERE predicates"; int i = stmt.executeUpdate(s); Le résultat est un entier donnant le nombre de mises-à-jour

JDBC - Y. Bekkers39 executeUpdate () - 3 DELETE Pour lancer une requète DELETE Statement stmt = con.createStatement(); String s = "DELETE FROM table WHERE predicates"; int i = stmt.executeUpdate(s); Le résultat est un entier donnant le nombre de d’effacements

JDBC - Y. Bekkers40 PreparedStatement Class.forName(driverClass); java.sql.Connection connection = java.sql.DriverManager.getConnection(url,user,password); PreparedStatement pstmt = connection.prepareStatement( "insert into users values(?,?,?,?)"); pstmt.setInt(1,user.getId()); pstmt.setString(2,user.getName()); pstmt.setString(3,user.get ()); pstmt.setString(4,user.getAddress()); pstmt.execute();

JDBC - Y. Bekkers41 Cinquième étape "Présenter les résultats"

JDBC - Y. Bekkers42 Récupération des résultats java.sql.Statement stmt = conn.createStatement(); String s = "SELECT a, b, c FROM Table1"; ResultSet rs = stmt.executeQuery(s); while (rs.next()) { int i = rs.getInt("a"); String s = rs.getString("b"); byte b[] = rs.getBytes("c"); System.out.println("ROW = " + i + " " + s + " " + b[0]); }

JDBC - Y. Bekkers43 Objets ResultSet ResultSet rs = stmt.executeQuery(s); Se parcourt itérativement row par row Les colonnes sont référencées par leur numéro ou leur nom L'accès aux valeurs des colonnes se fait par des méthodes getXXX() où XXX représente le type de l'attribut se trouvant dans la colonne

JDBC - Y. Bekkers44 Objets ResultSet (suite) Une rangée (row) est un tuple un RS contient un curseur pointant sur une rangée du résultat au départ le pointeur est positionné avant la 1ère rangée La méthode next() fait passer à l'enregistrement suivant. Le premier appel resultat. next() positionne sur la première rangée next() renvoie un booléen true en général, et false lorsque l'on a dépassé le dernier enregistrement.

JDBC - Y. Bekkers45 types SQL - méthodes JDBC BIGINTgetLong() BINARYgetBytes() BITgetBoolean() CHARgetString() DATEgetDate() DECIMALgetBigDecimal() DOUBLEgetDouble() FLOATgetDouble() INTEGERgetInt() LONGVARBINARYgetBytes()

JDBC - Y. Bekkers46 types SQL - méthodes JDBC (bis) LONGVARCHARgetString() NUMERICgetBigDecimal() OTHERgetObject() REALgetFloat() SMALLINTgetShort() TIMEgetTime() TIMESTAMPgetTimestamp() TINYINTgetByte() VARBINARYgetBytes() VARCHARgetString()

JDBC - Y. Bekkers47 Accès aux méta-données d'un ResultSet

JDBC - Y. Bekkers48 Méthode getMetaData() La méthode getMetaData() permet d'obtenir les méta-données d'un ResultSet. Elle renvoie des ResultSetMetaData. On peut connaître : Le nombre de colonnes : getColumnCount() Le nom d'une colonne : getColumnName(int col) Le type d'une colonne : getColumnType(int col)...

JDBC - Y. Bekkers49 Utilisation des méta-données private static void affiche (ResultSet resultat) throws java.sql.SQLException { int i; ResultSetMetaData rs = resultat.getMetaData (); int nbcol = rs.getColumnCount (); for (i=1; i<=nbcol; i++) { if (i > 1) System.out.print("\t"); System.out.print(rs.getColumnLabel(i)); } Entêtes de colonne

JDBC - Y. Bekkers50 Utilisation des méta-données (bis) boolean encore = resultat.next(); while (encore) { for (i=1; i<=nbcol; i++) { if (i > 1) System.out.print("\t"); System.out.print(resultat.getString(i)); } System.out.println(""); // ligne suivante encore = resultat.next(); } Sortir une ligne

JDBC - Y. Bekkers51 Accès aux méta-données d'une base

JDBC - Y. Bekkers52 Interface DatabaseMetaData Connection con = DriverManager.getConnection ("jdbc:odbc:epicerie"); // Envoi d'une demande d'information DatabaseMetaData meta = con.getMetaData(); String[] types = {"table"}; ResultSet rs = meta.getTables(null,null,"%",types); afficher(rs); le joker "%" permet d'obtenir toutes les tables sans connaître leur nom

JDBC - Y. Bekkers53 Exemples de résultats CATSCHEMENAMETYPEREMARKS..épicerienullfournisseurTABLEnull..épicerienullmafournitureTABLEnull..épicerienullproduitTABLEnull

JDBC - Y. Bekkers54 Traitement par lot con.setAutoCommit(false); stmt.addBatch("INSERT INTO fournisseur " + "VALUES('f9', 'Cochoux', 0.035, 'Brest')"); stmt.addBatch("INSERT INTO fournisseur " + "VALUES('f10', 'Enaf', 0.05, 'rennes')"); int[] updateCounts = stmt.executeBatch(); con.commit(); con.setAutoCommit(true); stmt.clearBatch();

JDBC - Y. Bekkers55 Traiter les erreurs

JDBC - Y. Bekkers56 Erreurs et avertissement Deux niveaux : Erreurs : La plupart des méthodes JDBC sont susceptibles de lever des exceptions java.sql.SQLException. Warnings : avertissements SQLWarning warn = con.getWarnings ();

JDBC - Y. Bekkers57 Prévenir les fuites de connections - 1 Connection conn = null; Statement stmt = null; ResultSet rs = null; try { conn =... obtenir une connexion dans un pool... stmt = conn.createStatement("select..."); rs = stmt.executeQuery();... iterer à travers le result set... rs.close(); rs = null; stmt.close(); stmt = null; conn.close(); // retourner la connexion conn = null; // pour s'assurer qu'elle // n'est pas fermée deux fois } catch (SQLException e) {

JDBC - Y. Bekkers58 Ramasse miette } catch (SQLException e) {... traiter le erreurs... } finally { // ne pas oublier de rendre les connexions // fermer resultset, statement et connection if (rs != null) { try { rs.close(); } catch (SQLException e) { ; } rs = null; } if (stmt != null) { try { stmt.close(); } catch (SQLException e) { ; } stmt = null; } if (conn != null) { try { conn.close(); } catch (SQLException e) { ; } conn = null; }

JDBC - Y. Bekkers59 Récupérer les avertissements if (warn != null) { System.out.println ("\n *** Warning ***\n"); rc = true; while (warn != null) { System.out.println ("SQLState: " + warn.getSQLState ()); System.out.println ("Message: " + warn.getMessage ()); System.out.println ("Vendor: " + warn.getErrorCode ()); System.out.println (""); warn = warn.getNextWarning (); }

JDBC - Y. Bekkers60 Conclusion Ce que vous avez vu dans ce cours –Bases de données, interface JDBC Introduction, concepts Pilote et gestionnaire de pilotes –Interface java.sql.Driver –Le cas d'ODBC Accès aux données –Charger un pilote –Créer une connexion à la base –Créer une requète (Statement) –Exécuter une requête –Présenter les résultats Accès aux méta-données Traiter les erreurs