Programmation d application Bases de données avec Java



Documents pareils
TP Programmation Java / JDBC / Oracle

Java DataBaseConnectivity

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

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

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

JDBC le langage Java XVI-1 JMF

OpenPaaS Le réseau social d'entreprise

JDBC JDBC. Java DataBase Connectivity

Accès aux bases de données

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)

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

1. Langage de programmation Java

Application web de gestion de comptes en banques

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

Panorama des Bases de Données

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

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

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

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

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

CREATION WEB DYNAMIQUE

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

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

SQL Historique

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

Bases de données relationnelles

Programmer en JAVA. par Tama

Java Database Connectivity (JDBC) - Langage SQL

[BASE DE DONNEES MULTIMEDIA]

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

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

Programmation Objet Java Correction

A QUOI SERVENT LES BASES DE DONNÉES?

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

1. Base de données SQLite

Dialogue avec la base de données

I4 : Bases de Données

Java - MySQL. Code: java-mysql

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

Les bases de données

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

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é

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

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

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

A QUOI SERVENT LES BASES DE DONNÉES?

Cours: Administration d'une Base de Données

Le Langage De Description De Données(LDD)

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

Bases de Données Avancées

Olivier Mondet

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

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

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

TP Contraintes - Triggers

Compte Rendu d intégration d application

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

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

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

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

Langage SQL : créer et interroger une base

Serveur d'archivage 2007 Installation et utilisation de la BD exist

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

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

Le Langage SQL version Oracle

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Introduction aux Bases de Données Relationnelles Conclusion - 1

Construire une base de donnée pour bibliothèque

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

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

Bases de données et sites WEB

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

Devoir Data WareHouse

as Architecture des Systèmes d Information

UML et les Bases de Données

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

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

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

PHP 4 PARTIE : BASE DE DONNEES

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

Architecture Orientée Service, JSON et API REST

Bases de données - Modèle relationnel

Optimisations des SGBDR. Étude de cas : MySQL

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

Implémentation des SGBD

Une introduction à Java

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)

Bases de données Page 1 de 11. Bases de données. Prof. : Dzenan Ridjanovic

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Bases de données avancées

Vincent Augusto

TP Bases de données réparties

Transcription:

Plan du document Programmation d application Bases de données avec Java INT Problématique slide 3 Correspondance diagramme de classe slide 4 UML vers schéma relationnel Programmation BD avec JDBC slide 16 Gestion de la persistance en Java slide 35 Ressources en ligne http://mica/~oracle/io21 1 2 Problématique Correspondance de schémas mapping classes déchargement objets chargement Processus (mémoire) Schéma relationnel SGBD tuples Transformer un diagramme de classes UML (partie statique) en un schéma relationnel «équivalent» Analogue à la transformation d un schéma Entité- Association vers un schéma relationnel avec le problème des hiérarchies de classes en plus Plusieurs correspondances possibles 3 4 Bases de Données 1

Exemple Document code titre auteur année Audio classification Vidéo duréefilm mentionlégale FicheEmprunt dateemprunt datelimite dépassé Livre nombrepage Client nom prénom adresse TarifNormal TarifRéduit dateinscription daterenouvellement Abonné datecotisation dateinscription Sémantique de la généralisation / spécialisation Sous ensemble d'entité hérite des attributs de son super ensemble d'entité Spécialisation peut être : totale (toute instance est spécialisée dans au moins un sous-ensemble) ou partielle une partition (une instance ne peut être spécialisée dans plusieurs sous-ensembles) ou un recouvrement 5 6 Exemple de généralisation / spécialisation PERSONNE nom prénom adresse P = E S ETUDIANT noétud cycle T/R E S SALARIE salaire S = PR PU T/P PRIVE prime PR PU = PUBLIC indice Correspondance 1 Une classe = une relation La liaison entre les relations se fait via la clé Fonctionne quelle que soit la sémantique d héritage Nécessite de reconstruire les objets par jointure 7 8 Bases de Données 2

Correspondance 1 pour Document Correspondance 2 Document(code, titre, auteur, année) Audio(code, classification) Vidéo(code, duréefilm, mentionlégale) Livre(code, nombrepage) Chaque classe spécialisée = une relation Classe mère = une vue Pour sémantique partition et totale Évite les jointures pour reconstruire les objets Multiplie les relations (traduction d associations modèle E/A) 9 10 Correspondance 2 pour Document Correspondance 3 Audio(code, titre, auteur, année, classification) Vidéo(code, titre, auteur, année, duréefilm, mentionlégale) Livre(code, titre, auteur, année, nombrepage) Create View Document As Select code, titre, auteur, année from Audio Union Select code, titre, auteur, année from Vidéo Union Select code, titre, auteur, année from Livre 9 relations pour la classe FicheEmprunt! Ensemble des classes de la hiérarchie = une seule relation Éventuellement chaque classe = une vue Introduit un attribut discriminant et des valeurs nulles Pour sémantique de partition Évite les jointures 11 12 Bases de Données 3

Correspondance 3 pour Document Correspondance 4 Document(code, titre, auteur, année, typedocument, classification, duréefilm, mentionlégale, nombrepage) Create view Audio as Select code, titre, auteur, année, classification From Document Where typedocument= Audio Variante de la correspondance 3 avec utilisation d un attribut booléen supplémentaire par sous classe Pour sémantique de recouvrement 13 14 Correspondance 4 pour Document JDBC Document(code, titre, auteur, année, AudioB, classification, VidéoB, duréefilm, mentionlégale, LivreB, nombrepage) Create view Audio as Select code, titre, auteur, année, classification From Document Where AudioB is true API Java pour manipuler des relations via SQL (dans des fichiers locaux ou via un SGBD) Une seule API uniforme (même niveau que SQL CLI de X/open) Indépendance / SGBD cible (via des pilotes) Code portable de bout en bout Pas forcément construit au dessus de ODBC 15 16 Bases de Données 4

Interfaces SQL LPG Programmer avec une BD Pilotes JDBC Approche Java Autres langages JDBC non supporté en natif par les SGBD du commerce (ou les systèmes de fichiers) Embedded SQL SQLJ Pro*C Transformations des appels JDBC en appels natifs Un pilote pour chaque SGBD 4 catégories de pilotes en fonctions de : SQL/CLI PSM JDBC PL/SQL ou Java ODBC La présence ou non de pilote SGBD (non java) sur le client Protocole de communication entre le client Java et le serveur 17 18 Les pilotes (suite) Classes et interfaces du "paquage"java.sql application JDBC Driver JDBC/Oracle API Oracle-OCI Oracle application JDBC Driver JDBC/Oracle + middleware client Ora*net serveur API Oracle-OCI Oracle Driver Statement Connection ResultSet ResultSetMetaData DatabaseMetaData PreparedStatement CallableStatement Java.lang.Object Java.util.Date DriverManager DriverPropertyInfo Types Date Time TimeStamp 20 Bases de Données 5

Connexion JDBC Connexion à la base (suite) Classe java.sql.connection URL d une source de données jdbc:<subprotocol>:<subname> private final String URLDBORACLE= "jdbc:oracle:thin:@tanna:1521:tpio"; private final String URLDBMYSQL= "jdbc:mysql//localhost/mediatheque"; Class.forName("oracle.jdbc.driver.OracleDriver"); chargement dynamique de la classe implémentant le pilote Oracle String dburl = "jdbc:oracle:thin:@tanna:1521:tpio"; construction de l url pour Oracle INT Connection conn = DriverManager.getConnection(dburl, "toto", "titi"); connexion à l url avec un (user, passwd)=(toto, titi) Création d'un Statement Exécution d'une requête (1/2) Un objet Statement symbolise une instruction SQL 3 types de statement : Statement : requêtes simples PreparedStatement : requêtes précompilées CallableStatement : procédures stockées Création d'un Statement : 3 types d'exécutions : executequery : pour les requêtes qui retournent un ensemble (SELECT) executeupdate : pour les requêtes INSERT, UPDATE, DELETE, CREATE TABLE et DROP TABLE execute : pour quelques cas rares (procédures stockées) Statement stmt = conn.createstatement(); Bases de Données 6

Exécution d'une requête (2/2) Récupération des résultats (1/2) Exécution de la requête : String myquery = "SELECT code, titre, auteur " + "FROM Document " + "WHERE (auteur LIKE L%') " + "ORDER BY titre"; ResultSet rs = stmt.executequery(myquery); executequery() renvoie un ResultSet Le RS se parcourt itérativement ligne par ligne 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 ou bien par un getobject suivi d une conversion explicite Pour les types longs, on peut utiliser des streams. Récupération des résultats (2/2) Exemple de SQL dynamique java.sql.statement stmt = conn.createstatement(); ResultSet rs = stmt.executequery("select code, titre, auteur from Document where auteur like L% "); while (rs.next()) { // print the values for the current row. int i = rs.getint("code"); String s1 = rs.getstring("titre"); String s2 = rs.getstring("auteur"); System.out.println("ROW = " + i + " " + s1 + " " +s2); class Document {... public static int updatedocument(int num, String nom) { try { Class.forName("oracle.jdbc.driver.OracleDriver"); String dburl ="jdbc:oracle:thin:@tanna:1521:tpio"; Connection conn = DriverManager.getConnection(dburl, "toto", "titi"); conn.setautocommit(false); PreparedStatement pstmt = conn.preparedstatement("update Document SET auteur=? WHERE code=?"); pstmt.setstring(1, nom); pstmt.setint(2, num); int nblignesmodifiees = pstmt.executeupdate(); if (nblignesmodifiees == 1) conn.commit(); else conn.rollback(); catch (Exception e) {e.printstacktrace(); 28 Bases de Données 7

Accès aux méta-données Exemple de MetaData 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 colonne : getcolumncount() Le nom d'une colonne : getcolumnname(int col) Le type d'une colonne : getcolumntype(int col)... class HTMLResultSet { private ResultSet rs; public HTMLResultSet (ResultSet rs){this.rs=rs; public String tostring() { StringBuffer out = new StringBuffer(); out.append("<table>"); ResultSetMetaData rsmd = rs.getmetadata(); int numcols = rsmd.getcolumncount(); out.append("<tr>"); for (int i=0;i<numcols;i++) { out.append("<th>").append(rsmd.getcolumnname(i)); out.append("</tr>");... 30 Exemple d'interrogation JDBC import java.sql.*; class TestDoc { public static void main (String args []) throws SQLException, ClassNotFoundException { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@tanna:1521:tpio", "toto", "titi"); Statement stmt = conn.createstatement(); ResultSet rset = stmt.executequery("select code, titre from Document"); while (rset.next()) { System.out.print (rset.getint(1)); System.out.print (" "); System.out.println (rset.getstring(2)); Exemple d'insertion JDBC import java.sql.*; class InsereDocument{ public static void main (String args [])throws SQLException, ClassNotFoundException { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@tanna:152 1:TPIO", "toto", "titi"); int codedoc = 100; String titredoc = "un long dimanche de fiancailles"; String auteurdoc = "Japrisot"; Statement stmt = conn.createstatement(); int res = stmt.executeupdate ("INSERT INTO Document(code, titre, auteur) VALUES(" + codedoc + ", " + titredoc + ", " + auteurdoc + " ) "); if (res == 1) { System.out.println("\nInsertion reussie\n"); conn.commit(); else conn.rollback(); 31 32 Bases de Données 8

Correspondance de type SQL/Java Evolution de JDBC Type SQL Type Java Type Java retourné par getobject() Méthode recommandée au lieu de getobject() numeric Java.Math.BigDecimal Java.Math.BigDecimal Java.Math.BigDecimal GetBigDecimal() integer int Integer Integer getint() float double Double Double getdoubel() char, varchar String String String getstring() date Java.sql.Date Java.sql.Date Java.sql.Date getdate() JDBC 1.0 (janvier 1996) JDBC 2.0 (Mars 1998) JDBC 2.1 (2000) Extensions de JDBC 2.x parcours avant/arrière d un ResultSet mise à jour depuis un ResultSet batch de plusieurs ordres SQL support des types SQL3 validation 2 phases via XA notion de DataSource et utilisation de JNDI pool de connexion, cache sur le client 33 34 Introduction de la persistance Structuration du code Comment intégrer le code JDBC qui va assurer chargement et déchargement des objets Java depuis la BD En structurant au mieux le code (limiter le nombre d opérations à modifier) Quel(s) objet(s) charger et quand? quel(s) objet(s) décharger et quand? Constructeur : chargement d objet «destructeur» : suppression d objet Opérations de mise à jour : modification d objets (attention à la granularité pour les transactions) 35 36 Bases de Données 9

Chargement / déchargement Chargement Statique : constructeur de «collections» Dynamique : constructeur d objet (nécessité d une clé pour sélectionner l objet) Déchargement Statique : à la fin du programme (attention aux pertes d infos) Dynamique : dans les opérations de mise à jour Chargement / déchargement (2) Statique Adapté aux petits volumes de données Faible taux de mises à jour Simple à mettre en œuvre Dynamique Adapté aux volumes de données importants Fort taux de mises à jour Meilleure résistance aux fautes Plus compliqué à programmer 37 38 Bases de Données 10