Robert Godin. Tous droits réservés. 1



Documents pareils
A QUOI SERVENT LES BASES DE DONNÉES?

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

A QUOI SERVENT LES BASES DE DONNÉES?

Cours Bases de données 2ème année IUT

OpenPaaS Le réseau social d'entreprise

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

Hala Skaf-Molli. Nancy-Université 14 mai 2007

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)

I4 : Bases de Données

Java DataBaseConnectivity

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

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

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

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

Programmation d application Bases de données avec Java

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

Gestion de base de données

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

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

Langage SQL : créer et interroger une base

Olivier Mondet

Corrigés détaillés des exercices

Application web de gestion de comptes en banques

Quelques aspects du Relationnel-Objet du SGBD Oracle

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

Java et les bases de données

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

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

Partie 0 : Gestion des tablespace et des utilisateurs... 3

CREATION WEB DYNAMIQUE

Les bases de données

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

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

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

BASES DE DONNEES ORIENTEES OBJETS BDA10.1

Optimisations des SGBDR. Étude de cas : MySQL

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

TP Contraintes - Triggers

SQL Historique

TP Bases de données réparties

TP Programmation Java / JDBC / Oracle

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

Bases de données relationnelles

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

BASES DE DONNEES TP POSTGRESQL

Création et Gestion des tables

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

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

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

Présentation Windows Azure Hadoop Big Data - BI

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

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

Les BASES de DONNEES dans WampServer

Modernisation, développement d applications et DB2 sous IBM i Technologies, outils et nouveautés Volubis.fr

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

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

Exemple accessible via une interface Web. Bases de données et systèmes de gestion de bases de données. Généralités. Définitions

Le Langage De Description De Données(LDD)

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

[BASE DE DONNEES MULTIMEDIA]

Bases de données avancées

Le Langage SQL version Oracle

Bases de Données. Le cas des BD relationnelles ouverture sur les BD relationnelles spatiales Séance 2 : Mise en oeuvre

UML et les Bases de Données

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

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

Bases de données élémentaires Maude Manouvrier

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

Bases de données avancées Introduction

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

Chapitre 10. Les interfaces Comparable et Comparator 1

Auto-évaluation Oracle: cours de base

Introduction à la programmation concurrente

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

Une introduction à Java

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

NF26 Data warehouse et Outils Décisionnels Printemps 2010

Introduction aux bases de données. Généralités sur les bases de données. Fonctions d'un SGBD. Définitions. Indépendance par rapport aux traitements

Programmer en JAVA. par Tama

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Programmation Objet Java Correction

Compétences Business Objects

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

Chapitre 5 : Les procédures stockées PL/SQL

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

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

1. Base de données SQLite

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

Les Bases de Données et l Objet Introduction

Faculté des sciences de gestion et sciences économiques BASE DE DONNEES

Java Licence Professionnelle CISII,

Information utiles. webpage : Google+ : digiusto/

Devoir Data WareHouse

Introduction au Système de Gestion de Base de Données et aux Base de Données

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

Premiers Pas en Programmation Objet : les Classes et les Objets

Transcription:

LOG660 - Bases de données de haute performance Paradigme relationnel-objet Hiver 2011 C. Desrosiers Le modèle relationnel-objet (OR Ajoute quelques notions au modèle relationnel, qui comblent ses plus grosses lacunes Compatibilité ascendante : les applications relationnelles fonctionnent dans le monde OR La norme SQL:1999 (SQL3 reprend beaucoup d'idées du modèle OR Diffère des bases de données objet (SGBDO Le monde de l application est distinct de celui de la BD Il faut quand même créer l interface entre ces deux mondes (ex: JDBC R. Godin, C. Desrosiers - Hiver 2011 2 Pourquoi le relationnel-objet? Simplicité et performance La reconstitution d objets complexes éclatés sur plusieurs tables relationnelles est coûteuse car elle occasionne de nombreuses jointures Pour échapper aux éclatements-jointures, l'or introduit Les références, qui permettent d'implanter des structures complexes Les attributs multivalués (tableaux, ensembles ou listes R. Godin, C. Desrosiers - Hiver 2011 3 Robert Godin. Tous droits réservés. 1

Pourquoi le relationnel-objet? Rapprochement au monde objet (applications Permet de définir de nouveaux types utilisateur simples ou complexes (User data type Permet d encapsuler les opérations sur les données avec les données (fonctions, procédures Supporte l'héritage de type pour profiter du polymorphisme et faciliter la réutilisation Données multimédia volumineuses Facilite le stockage et la manipulation de données multimédia volumineuses en permettant leur partage simplement et à moindre coût (sans jointure R. Godin, C. Desrosiers - Hiver 2011 4 Pourquoi ne pas passer directement aux SGBD Objet? Inertie de l existant: de très nombreuses bases relationnelles en fonctionnement Manque de normalisation pour les SGBDO / trop de solutions propriétaires Moins souple que le relationnel pour s adapter à plusieurs applications et à l augmentation de charge Peu d'informaticiens formés aux SGBDO Le modèle OR peut permettre un passage en douceur R. Godin, C. Desrosiers - Hiver 2011 5 Nouvelles possibilités de l OR Définir de nouveaux types complexes avec des fonctions pour les manipuler Une colonne peut contenir une collection (ensemble, sac, liste Ligne considérée comme un objet, avec un identificateur (Object Identifier OID Utilisation de références aux objets Extensions du langage SQL (SQL3 ou SQL99 pour la recherche et la modification des données R. Godin, C. Desrosiers - Hiver 2011 6 Robert Godin. Tous droits réservés. 2

Les problèmes de l'or Ne s'appuie pas sur une théorie solide comme le modèle relationnel Manque de standard de fait : implantations différentes, et encore partielles, dans les divers SGBDs R. Godin, C. Desrosiers - Hiver 2011 7 Types définis par l'utilisateur (UDT Équivalent à une classe en OO Un UDT possède Des attributs (simples ou autres types Des méthodes Utilisations d un UDT Comme colonne d'une table ordinaire, Comme attribut d'un autre type, Comme une ligne d'une table d'objets R. Godin, C. Desrosiers - Hiver 2011 8 Traduction d'une classe d'objets UML persistante par un type et une TABLE d'objets Editeur {UNIQUE: nomediteur} nomediteur : String : String CREATE TYPE EditeurType AS OBJECT VARCHAR(20 CHAR(13, VARCHAR(50, annéeparution TypeDonnéesAnnée, (PRIMARY KEY 1 1..* CREATE TABLE Livre OF LivreType (PRIMARY KEY, CONSTRAINT annéesup0 CHECK(annéeParution.valeurAnnée > 0, CONSTRAINT referencetableediteur SCOPE IS Editeur Livre {UNIQUE: ISBN} ISBN : String : String annéeparution : TypeDonnéesAnnée R. Godin, C. Desrosiers - Hiver 2011 9 Robert Godin. Tous droits réservés. 3

Type de valeurs d'un attribut ou colonne Livre {UNIQUE: ISBN} ISBN : String : String annéeparution : TypeDonnéesAnnée <<datatype>> TypeDonnéesAnnée {Integer > 0 } CREATE TYPE TypeDonnéesAnnée AS OBJECT (valeurannée INTEGER CHAR(13, VARCHAR(50, annéeparution TypeDonnéesAnnée, CREATE TABLE Livre OF LivreType (PRIMARY KEY, CONSTRAINT annéesup0 CHECK(annéeParution.valeurAnnée > 0, CONSTRAINT referencetableediteur SCOPE IS Editeur R. Godin, C. Desrosiers - Hiver 2011 10 Les références (REF Pointe vers un objet du type correspondant Renferme un identifiant objet (OID généré soit 1. Automatiquement (défaut indexation efficace potentiellement moins lourd qu avec la clé primaire 2. À partir de la clé primaire CREATE TABLE NomTable OF NomType ( ( PRIMARY KEY( OBJECT IDENTIFIER IS PRIMARY KEY Obligatoire R. Godin, C. Desrosiers - Hiver 2011 11 Les références (REF REF vs clé étrangère: Permet de représenter une relation 1 à plusieurs à l aide d une collection de références (jointure si clé étrangère Peut pointer dans le vide si l objet est supprimé Peut pointer sur des objets stockés dans des tables différentes R. Godin, C. Desrosiers - Hiver 2011 12 Robert Godin. Tous droits réservés. 4

Traduction d'une association un à plusieurs UML par référence simple (REF Editeur {UNIQUE: nomediteur} nomediteur : String : String Livre {UNIQUE: ISBN} ISBN : String 1 1..* : String annéeparution : TypeDonnéesAnnée CHAR(13, VARCHAR(50, annéeparution DomaineAnnée,, R. Godin, C. Desrosiers - Hiver 2011 13 Contrainte SCOPE IS Editeur {UNIQUE: nomediteur} nomediteur : String : String 1 1..* Livre {UNIQUE: ISBN} ISBN : String : String annéeparution : TypeDonnéesAnnée CHAR(13, VARCHAR(50, annéeparution DomaineAnnée,, CREATE TABLE Livre OF LivreType (PRIMARY KEY, CONSTRAINT annéesup0 CHECK(annéeParution.valeurAnnée > 0, CONSTRAINT referencetableediteur SCOPE IS Editeur R. Godin, C. Desrosiers - Hiver 2011 14 Références inverses Editeur {UNIQUE: nomediteur} nomediteur : String : String CHAR(13, VARCHAR(50, annéeparution TypeDonnéesAnnée, 1 1..* Livre {UNIQUE: ISBN} ISBN : String : String annéeparution : TypeDonnéesAnnée CREATE TYPE LivreRefType AS OBJECT (livreref REF LivreType CREATE TYPE tablereflivrestype AS TABLE OF LivreRefType CREATE OR REPLACE TYPE EditeurType AS OBJECT leslivres tablereflivrestype (PRIMARY KEY NESTED TABLE leslivres STORE AS tableleslivres R. Godin, C. Desrosiers - Hiver 2011 15 Robert Godin. Tous droits réservés. 5

Représentation d'un type de données complexe ou d'une composition UML par un UDT Membre {UNIQUE : nomembre} nomembre : Integer nom : String prénom : String adresse : typedonnéesadresse CREATE TYPE TypeDonnéesAdresse AS OBJECT (nocivique INTEGER, numéroappartement INTEGER, nomrue nomville nomprovince nompays codepostal VARCHAR(10 <<datatype>> typedonnéesadresse numérocivique : Integer numéroappartement : Integer nomrue : String nomville : String nomprovince : String nompays : String codepostal : String CREATE TYPE MembreType AS OBJECT (nomembre INTEGER, nom prénom adresse typedonnéesadresse R. Godin, C. Desrosiers - Hiver 2011 16 Traduction du rôle * d une composition par NESTED TABLE (non approprié ici CREATE TYPE tablelivrestype AS TABLE OF LivreType CREATE OR REPLACE TYPE EditeurType AS OBJECT leslivres tablelivrestype (PRIMARY KEY NESTED TABLE leslivres STORE AS tableleslivres Stockage à part R. Godin, C. Desrosiers - Hiver 2011 17 VARRAY Oracle (stockage interne à la table CREATE TYPE varraylivrestype AS VARRAY(10 OF LivreType CREATE OR REPLACE TYPE EditeurType AS OBJECT leslivres varraylivrestype VARRAY vs NESTED TABLE Les objets sont stockés directement dans la table, au lieu d une table séparée Évite la jointure entre les tables Ordre explicite entre les objets de la collection R. Godin, C. Desrosiers - Hiver 2011 18 Robert Godin. Tous droits réservés. 6

Définition de méthodes CREATE OR REPLACE TYPE EditeurType AS OBJECT MEMBER FUNCTION nblivres RETURN NUMBER, PRAGMA RESTRICT_REFERENCES(nbLivres,WNDS,WNPS CREATE OR REPLACE TYPE BODY EditeurType AS MEMBER FUNCTION nblivres RETURN NUMBER IS nb NUMBER; BEGIN SELECT COUNT(* INTO nb FROM Livre l WHERE l..nomediteur = SELF.nomEditeur; RETURN nb; END nblivres; END; SELECT FROM WHERE e.nblivres( Editeur e e.nomediteur = 'XXX' R. Godin, C. Desrosiers - Hiver 2011 19 Autres détails sur les méthodes Paramètres MAP et ORDER: MAP: [MAP ORDER] MEMBER FUNCTION nomfonction[(paramètres] RETURN TypeRetour La valeur de retour est employée pour comparer deux objets de ce type ORDER: Prend en paramètre un objet et retourne {-1,0,+1} si cet objet est {<,=,>} à l objet sur lequel la fonction est appelée R. Godin, C. Desrosiers - Hiver 2011 20 Héritage de types CREATE TYPE PersonneType AS OBJECT (nom VARCHAR(10, prénom VARCHAR(10 NOT FINAL CREATE TYPE UtilisateurType UNDER PersonneType (idutilisateur VARCHAR(10, motpasse VARCHAR(10, catégorieutilisateur VARCHAR(14 Personne nom : String prénom : String Utili sateur {UNIQUE :idutilis ateur} idutilisateur : String motpasse : String R. Godin, C. Desrosiers - Hiver 2011 21 Robert Godin. Tous droits réservés. 7

Autres détails sur l héritage Spécialisation des méthodes (dans le type enfant: [FINAL] OVERRIDING MEMBER FUNCTION nomfonction[(paramètres] RETURN TypeRetour FINAL: empêche la fonction d être redéfinie dans un sous-type OVERRIDING: spécifie que la fonction est une redéfinition Type abstrait (ex: interface Java CREATE TYPE NomType AS OBJECT ( NOT INSTANTIABLE Up/down cast TREAT(nomObjet as TypeEnfantOuParent.nomFonction( Tester le type d un objet SELECT VALUE(o FROM TableObjet WHERE VALUE(o IS OF (NomType1, NomType, VALUE: convertit en objet une ligne d une table d objets R. Godin, C. Desrosiers - Hiver 2011 22 Extensions au langage de manipulation de données SQL Expression de chemin SELECT m.nom, m.adresse.nomrue FROM Membre m CREATE TYPE TypeDonnéesAdresse AS OBJECT (nocivique INTEGER, numéroappartement INTEGER, nomrue nomville nomprovince nompays codepostal VARCHAR(10 CREATE TYPE MembreType AS OBJECT (nomembre INTEGER, nom prénom adresse typedonnéesadresse CREATE TABLE Membre OF MembreType (PRIMARY KEY(noMembre WHERE m.adresse.nomville = 'Montréal' R. Godin, C. Desrosiers - Hiver 2011 23 Cheminement par références CREATE TYPE EditeurType AS OBJECT VARCHAR(20 CHAR(13, VARCHAR(50, annéeparution TypeDonnéesAnnée, (PRIMARY KEY CREATE TABLE Livre OF LivreType (PRIMARY KEY, CONSTRAINT annéesup0 CHECK(annéeParution.valeurAnnée > 0, CONSTRAINT referencetableediteur SCOPE IS Editeur SELECT l..nomediteur, l.isbn FROM Livre l WHERE l.. = 'Paris' R. Godin, C. Desrosiers - Hiver 2011 24 Robert Godin. Tous droits réservés. 8

Déréférences d objets DEREF DEREF: déréférencer de manière explicite une référence Exemple: afficher les attributs de l objet de type ÉditeurType SELECT DEREF(l. FROM Livre l WHERE l.. = 'Paris' R. Godin, C. Desrosiers - Hiver 2011 25 Accès à une table enchâssée par l'opérateur d'aplatissement (TABLE CHAR(13, VARCHAR(50, annéeparution TypeDonnéesAnnée, CREATE TYPE LivreRefType AS OBJECT (livreref REF LivreType CREATE TYPE tablereflivrestype AS TABLE OF LivreRefType CREATE OR REPLACE TYPE EditeurType AS OBJECT leslivres tablereflivrestype (PRIMARY KEY NESTED TABLE leslivres STORE AS tableleslivres SELECT livres.livreref.isbn, livres.livreref. FROM TABLE (SELECT e.leslivres FROM Editeur e WHERE nomediteur = 'Addison-Wesley' livres R. Godin, C. Desrosiers - Hiver 2011 26 Insertion et constructeur d'objet CREATE TYPE EditeurType AS OBJECT (PRIMARY KEY INSERT INTO Editeur VALUES ('Loze-Dion', 'Longueuil' INSERT INTO Editeur VALUES (EditeurType('Loze-Dion', 'Longueuil' R. Godin, C. Desrosiers - Hiver 2011 27 Robert Godin. Tous droits réservés. 9

TYPE dans une colonne CREATE TYPE TypeDonnéesAdresse AS OBJECT (nocivique INTEGER, numéroappartement INTEGER, nomrue nomville nomprovince nompays codepostal VARCHAR(10 CREATE TYPE MembreType AS OBJECT (nomembre INTEGER, nom prénom adresse typedonnéesadresse CREATE TABLE Membre OF MembreType (PRIMARY KEY(noMembre INSERT INTO Membre VALUES (10,'Tremblay','Jean',TypeDonnéesAdresse(100,2, 'Ste-Catherine','Montréal','Québec','Canada','H3C 3P8' R. Godin, C. Desrosiers - Hiver 2011 28 Colonne REF CREATE TYPE EditeurType AS OBJECT VARCHAR(20 CHAR(13, VARCHAR(50, annéeparution TypeDonnéesAnnée, (PRIMARY KEY CREATE TABLE Livre OF LivreType (PRIMARY KEY, CONSTRAINT annéesup0 CHECK(annéeParution.valeurAnnée > 0, CONSTRAINT referencetableediteur SCOPE IS Editeur INSERT INTO Livre SELECT '0-201-12227-8', 'Automatic Text Processing', typedonnéesannée(1989,ref(e FROM Editeur e WHERE nomediteur = 'Addison-Wesley' R. Godin, C. Desrosiers - Hiver 2011 29 Insertion dans un NESTED TABLE CHAR(13, VARCHAR(50, annéeparution TypeDonnéesAnnée, CREATE TYPE LivreRefType AS OBJECT (livreref REF LivreType CREATE TYPE tablereflivrestype AS TABLE OF LivreRefType CREATE OR REPLACE TYPE EditeurType AS OBJECT leslivres tablereflivrestype (PRIMARY KEY NESTED TABLE leslivres STORE AS tableleslivres INSERT INTO Editeur VALUES ('Loze-Dion', 'Longueuil',tableRefLivresType( INSERT INTO Livre SELECT '0-201-12227-8', 'Automatic Text Processing', TypeDonnéesAnnée(1989, REF(e FROM Editeur e WHERE nomediteur = 'Addison-Wesley' INSERT INTO THE (SELECT e.leslivres FROM Editeur e WHERE e.nomediteur = 'Addison-Wesley' SELECT REF(l FROM Livre l WHERE l.isbn = '0-201-12227-8' R. Godin, C. Desrosiers - Hiver 2011 30 Robert Godin. Tous droits réservés. 10

Accès aux extensions objets en Java Créer une classe Java pour un UDT Typage faible : java.sql.struct Typage fort classe Java implements SQLData Créer un UDT à partir d une classe Java SQLJ (partie 2, SQL/JRT dans SQL:2003 R. Godin, C. Desrosiers - Hiver 2011 31 Typage faible par java.sql.struct // Recherche de la référence au LivreType ISBN = '0-201-12227-8' PreparedStatement unpreparedstatement = uneconnection.preparestatement ("SELECT REF(l AS reflivre FROM Livre l WHERE l.isbn = '0-201-12227-8'"; ResultSet unresultset = unpreparedstatement.executequery(; if (unresultset.next({ // Conversion de la référence à l'udt LivreType sous forme d'un objet Java REF REF ref = (REF unresultset.getobject(1; // Extraire l'objet LivreType référencé sous forme d'un STRUCT STRUCT unlivrestruct = (STRUCT ref.getvalue(; // Recherche des attributs du UDT LivreType sous forme d'un tableau d'objets Object attributsdelivre[] = unlivrestruct.getattributes(; // Cast des attributs selon leur type System.out.println("ISBN :"+(StringattributsDeLivre[0]; // ISBN CHAR(13 System.out.println(" :"+(StringattributsDeLivre[1]; // VARCHAR(50 R. Godin, C. Desrosiers - Hiver 2011 32 Typage fort et conversion de type automatique avec SQLdata public class LivreTypePourUDT implements SQLData { // nomudt contient le nom du UDT qui correspond à la classe private String nomudt = "GODIN.LIVRETYPE"; protected String ISBN; protected String ; protected Typedonnéesannée annéeparution; protected java.sql.ref ; public LivreTypePourUDT({} // Lecteurs et modifieurs public String getisbn({ return ISBN; } public void setisbn(string isbn{ this.isbn = isbn; } // public int getlengthtitre({ return.length(;} public String gettitreenminuscules({return.tolowercase(;} // Méthodes de l'interface SQLdata à implémenter // Retourne le UDT SQL qui correspond à la classe Java public String getsqltypename( throws SQLException { return nomudt;} public void readsql(sqlinput stream, String type throws SQLException{ setisbn(stream.readstring(; settitre(stream.readstring(; setannéeparution((typedonnéesannéestream.readobject(; setéditeur(stream.readref(; } public void writesql(sqloutput stream throws SQLException{ stream.writestring(getisbn(; stream.writestring(gettitre(; stream.writeobject(getannéeparution(; stream.writeref(getéditeur(; Département de génie logiciel } et des TI R. Godin, C. Desrosiers - Hiver 2011 33 } Robert Godin. Tous droits réservés. 11

CAST du REF UDT en objet Java Pour le pilote JDBC // Recherche de la référence au LivreType ISBN = '0-201-12227-8' PreparedStatement unpreparedstatement = uneconnection.preparestatement ("SELECT REF(l AS reflivre FROM Livre l WHERE l.isbn = '0-201-12227-8'"; ResultSet unresultset = unpreparedstatement.executequery(; //Créer un type map qui associe le UDT à la classe SQLdata java.util.map typemap = uneconnection.gettypemap(; typemap.put("livretype",class.forname("livretypepourudt"; typemap.put("typedonnéesannée",class.forname("typedonnéesannée"; typemap.put("editeurtype",class.forname("editeurtypepourudt"; if (unresultset.next({ // Conversion de la référence à l'udt LivreType sous forme d'un objet Java REF REF ref = (REF unresultset.getobject(1; LivreTypePourUDT unlivretype = (LivreTypePourUDTref.getValue(; System.out.println("ISBN :"+unlivretype.getisbn(; // ISBN CHAR(13 System.out.println(" :"+unlivretype.gettitre(; // VARCHAR(50 R. Godin, C. Desrosiers - Hiver 2011 34 Objet SQLJ : partie 2 de la norme SQLJ Déployer les classes Java TypeDonnéesAnnée et LivreTypePourUDT au niveau du serveur BD CREATE OR Outil REPLACE loadjava TYPE d Oracle TypeDonnéesAnnée AS OBJECT EXTERNAL NAME 'Typedonnéesannée' LANGUAGE JAVA USING SQLData (valeurannée INTEGER EXTERNAL NAME 'valeurannée' EXTERNAL NAME 'LivreTypePourUDT' LANGUAGE JAVA USING SQLData CHAR(13 EXTERNAL NAME 'ISBN', VARCHAR(50 EXTERNAL NAME '', annéeparution TypeDonnéesAnnée EXTERNAL NAME 'annéeparution', EditeurType EXTERNAL NAME '', REF MEMBER FUNCTION getlengthtitre return NUMBER EXTERNAL NAME 'getlengthtitre( return int', MEMBER FUNCTION gettitreenminuscules RETURN VARCHAR2 EXTERNAL NAME 'gettitreenminuscules( return String' Pas besoin d inclure la correspondance dans le typemap du programme Java R. Godin, C. Desrosiers - Hiver 2011 35 Robert Godin. Tous droits réservés. 12