Plan. Java et les SGBDR. Librairies JDBC. Introduction - concepts. JDBC Généricité - standardisation

Documents pareils
Java DataBaseConnectivity

Programmation d application Bases de données avec Java

Introduction à JDBC. Accès aux bases de données en Java

TP Programmation Java / JDBC / Oracle

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

Accès aux bases de données

JDBC le langage Java XVI-1 JMF

JDBC JDBC. Java DataBase Connectivity

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

1. Langage de programmation Java

OpenPaaS Le réseau social d'entreprise

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Java et les bases de données

Java - MySQL. Code: java-mysql

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Java Database Connectivity (JDBC) - Langage SQL

Exploitation de bases de données relationnelles et orientées objet IFT287

Création et Gestion des tables

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Olivier Mondet

Application web de gestion de comptes en banques

INSTALLATION DE L APPLICATION DU CONTEXTE ITASTE

Dialogue avec la base de données

PHP 5. La base de données MySql. A. Belaïd 1

Plan. Accès aux données dans le framework.net. ADO.NET Entity Framework LINQ ADO.NET ADO.NET. 1. ADO.NET Mode connecté Mode non connecté

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Paradox 9. Guide de l utilisateur jpdox Web Utilities

Panorama des Bases de Données

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Plan du cours. Historique du langage Nouveautés de Java 7

Les BASES de DONNEES dans WampServer

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Programmer en JAVA. par Tama

Création d une application JEE

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Compte-rendu de projet de Système de gestion de base de données

CREATION WEB DYNAMIQUE

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Les bases de données

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Le langage SQL (première partie) c Olivier Caron

1. Base de données SQLite

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Connectivité aux bases de données Java (JDBC)

Bases de Données relationnelles et leurs systèmes de Gestion

PHP 4 PARTIE : BASE DE DONNEES

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Tutoriel d installation de Hibernate avec Eclipse

LES ACCES ODBC AVEC LE SYSTEME SAS

as Architecture des Systèmes d Information

Mise en oeuvre d'une base de données mono-utilisateur avec SQLite

PDO : PHP Data Object 1/13

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Bases de données relationnelles

1/ Présentation de SQL Server :

Historisation des données

FileMaker 13. Guide de référence SQL

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Cours: Administration d'une Base de Données

Développement Web - Object Relational Mapping and Hibernate

Mysql. Les requêtes préparées Prepared statements

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

I4 : Bases de Données

PHP. PHP et bases de données

FileMaker 10. Guide ODBC et JDBC

MySQL avec Mac OS X. Quelques manipulations avec le terminal sont nécessaires si une version de MySQL est déjà lancée:

TP3 : Creation de tables 1 seance

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

I. MySQL : Serveur et SGBD

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

Notes de cours : bases de données distribuées et repliquées

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Package Java.util Classe générique

Logiciel de gestion de caisse et d ardoises

SQL Historique

Modélisation et Gestion des bases de données avec mysql workbench

FileMaker 13. Guide ODBC et JDBC

Optimisations des SGBDR. Étude de cas : MySQL

Le Langage De Description De Données(LDD)

[BASE DE DONNEES MULTIMEDIA]

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

INITIATION AU LANGAGE JAVA

PROJET 1 : BASE DE DONNÉES REPARTIES

Généralités sur le Langage Java et éléments syntaxiques.

Construire une base de donnée pour bibliothèque

Une introduction à Java

IFT3030 Base de données. Chapitre 1 Introduction

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Présentation Windows Azure Hadoop Big Data - BI

Intégrité sémantique dans les bases de données relationnelles

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Transcription:

Java et les SGBDR Librairies JDBC Yves Bekkers 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. Bekkers 1 JDBC - Y. Bekkers 2 Librairies JDBC Introduction - concepts JDBC - Y. Bekkers 3 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. Bekkers 4 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" Pilote et gestionnaire de pilotes "Driver et driver manager" JDBC - Y. Bekkers 5 JDBC - Y. Bekkers 6 JDBC - Yves Bekkers 1

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 Un même driver peut piloter plusieurs bases Java JDBC Driver SGBD2 SGBD1 DriverManager DriverManager Driver1 Driver2 DriverN Java Nommage externe SGBD1 SGBD2 SGBDN JDBC - Y. Bekkers 7 JDBC - Y. Bekkers 8 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 à http://industry.java.sun.com/products/jdbc/drivers Le cas d'odbc JDBC - Y. Bekkers 9 JDBC - Y. Bekkers 10 Accès à une base MS Access Passerelle Jdbc:odbc gestionnaire de données ODBC32 Administration des liens ODBC sous Windows 2000 (1) Outils d'administration (panneau de configuration) Appli Passerelle JDBC JDBC- ODBC ODBC liens BD programme.java Java librairies java.sql javax.sql gestionnaire ODBC32 sources de données SQL Server Access Excel... Station sous Windows JDBC - Y. Bekkers 11 JDBC - Y. Bekkers 12 JDBC - Yves Bekkers 2

Administration des liens ODBC sous Windows 2000 (2) Source odbc (sous outils d'administration) Administration des liens ODBC sous Windows 2000 (3) fichier Access Onglet données fichier Type "MS Access" Configurer JDBC - Y. Bekkers 13 JDBC - Y. Bekkers 14 Administration des liens ODBC sous Windows 2000 (4) fichier Access Nom donnée au lien Emplacement du fichier Confirmer Accès aux données JDBC - Y. Bekkers 15 JDBC - Y. Bekkers 16 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 Première étape "charger un pilote" JDBC - Y. Bekkers 17 JDBC - Y. Bekkers 18 JDBC - Yves Bekkers 3

Charger un pilote Classejava.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) 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. Bekkers 19 JDBC - Y. Bekkers 20 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) {... 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 nom1 nom2 JDBC - Y. Bekkers 21 JDBC - Y. Bekkers 22 Classe java.sql.connection Seconde étape "Créer une connexion à la base" 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:msql://athens.imaginaire.com:4333/db jdbc:oracle:thin:@blabla:1715:test JDBC - Y. Bekkers 23 JDBC - Y. Bekkers 24 JDBC - Yves Bekkers 4

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 Troisième étape "Créer une requète" JDBC - Y. Bekkers 25 JDBC - Y. Bekkers 26 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. Bekkers 27 Héritage entre interfaces requètes Statement PreparedStatement CallableStatement JDBC - Y. Bekkers 28 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 La réquete sql n est pas liée àl objet Statement Initialisation Connection con = getconnection(); Exécuter une requête String sql = "SELECT * FROM fournisseur"; ResultSet rs = stmt.executequery(sql); JDBC - Y. Bekkers 29 JDBC - Y. Bekkers 30 JDBC - Yves Bekkers 5

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); Quatrième étape "Exécuter une requête" pstmt.setbigdecimal(1, 153833.00); pstmt.setint(2, 110592); JDBC - Y. Bekkers 31 JDBC - Y. Bekkers 32 Interrogation de la base Instruction SQL «select» String sql = "SELECT * FROM fournisseur"; ResultSet rs = stmt.executequery(sql); Mise à jour : effacer une table Instruction SQL «drop table» Statement stmt = con.createstatement(); int i = stmt.executeupdate( "drop table fournisseur"); JDBC - Y. Bekkers 33 JDBC - Y. Bekkers 34 Statement - Deux types d'exécution Requètes "select" retournant un tableau 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. Bekkers 35 executequery () Pour lancer une requète "SELECT" statique 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. Bekkers 36 JDBC - Yves Bekkers 6

executeupdate () - 1 INSERT INTO Pour lancer une requète INSERT 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 executeupdate () - 2 UPDATE Pour lancer une requète UPDATE 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. Bekkers 37 JDBC - Y. Bekkers 38 executeupdate () - 3 DELETE Pour lancer une requète DELETE String s = "DELETE FROM table WHERE predicates"; int i = stmt.executeupdate(s); Le résultat est un entier donnant le nombre de d effacements 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.getemail()); pstmt.setstring(4,user.getaddress()); pstmt.execute(); JDBC - Y. Bekkers 39 JDBC - Y. Bekkers 40 Récupération des résultats Cinquième étape "Présenter les résultats" JDBC - Y. Bekkers 41 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. Bekkers 42 JDBC - Yves Bekkers 7

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. Bekkers 43 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. Bekkers 44 types SQL - méthodes JDBC types SQL - méthodes JDBC (bis) BIGINT getlong() LONGVARCHAR getstring() BINARY getbytes() NUMERIC getbigdecimal() BIT getboolean() OTHER getobject() CHAR getstring() REAL getfloat() DATE getdate() SMALLINT getshort() DECIMAL getbigdecimal() TIME gettime() DOUBLE getdouble() TIMESTAMP gettimestamp() FLOAT getdouble() TINYINT getbyte() INTEGER getint() VARBINARY getbytes() LONGVARBINARY getbytes() VARCHAR getstring() JDBC - Y. Bekkers 45 JDBC - Y. Bekkers 46 Méthode getmetadata() Accès aux méta-données d'un ResultSet 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. Bekkers 47 JDBC - Y. Bekkers 48 JDBC - Yves Bekkers 8

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. Bekkers 49 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. Bekkers 50 Interface DatabaseMetaData Accès aux méta-données d'une base Connection con = DriverManager.getConnection ("jdbc:odbc:epicerie"); // Envoi d'une demande d'information DatabaseMetaData meta = con.getmetadata(); String[] types = {"table"; ResultSet rs = meta.gettables(,,"%",types); afficher(rs); le joker "%" permet d'obtenir toutes les tables sans connaître leur nom JDBC - Y. Bekkers 51 JDBC - Y. Bekkers 52 Exemples de résultats Traitement par lot CAT..épicerie..épicerie..épicerie SCHEME NAME fournisseur mafourniture produit TYPE TABLE TABLE TABLE REMARKS 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. Bekkers 53 JDBC - Y. Bekkers 54 JDBC - Yves Bekkers 9

Erreurs et avertissement Traiter les erreurs 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. Bekkers 55 JDBC - Y. Bekkers 56 Prévenir les fuites de connections - 1 Connection conn = ; Statement stmt = ; ResultSet rs = ; try { conn =... obtenir une connexion dans un pool... stmt = conn.createstatement("select..."); rs = stmt.executequery();... iterer à travers le result set... rs.close(); rs = ; stmt.close(); stmt = ; conn.close(); // retourner la connexion conn = ; // pour s'assurer qu'elle // n'est pas fermée deux fois catch (SQLException e) { JDBC - Y. Bekkers 57 Ramasse miette catch (SQLException e) {... traiter le erreurs... finally { // ne pas oublier de rendre les connexions // fermer resultset, statement et connection if (rs!= ) { try { rs.close(); catch (SQLException e) { ; rs = ; if (stmt!= ) { try { stmt.close(); catch (SQLException e) { ; stmt = ; if (conn!= ) { try { conn.close(); catch (SQLException e) { ; conn = ; JDBC - Y. Bekkers 58 Récupérer les avertissements if (warn!= ) { System.out.println ("\n *** Warning ***\n"); rc = true; while (warn!= ) { 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. Bekkers 59 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 JDBC - Y. Bekkers 60 JDBC - Yves Bekkers 10