Paradigme relationnel-objet. Hiver 2011 C. Desrosiers

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

I4 : Bases de Données

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

A QUOI SERVENT LES BASES DE DONNÉES?

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

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)

OpenPaaS Le réseau social d'entreprise

Application web de gestion de comptes en banques

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

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

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

Quelques aspects du Relationnel-Objet du SGBD Oracle

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

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

Programmation d application Bases de données avec Java

Java DataBaseConnectivity

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

Corrigés détaillés des exercices

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

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

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

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

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

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

Bases de données relationnelles

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

CREATION WEB DYNAMIQUE

Langage SQL : créer et interroger une base

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

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

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

SQL Historique

Gestion de base de données

Java et les bases de données

TP Bases de données réparties

TP Contraintes - Triggers

Le Langage SQL version Oracle

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

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

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

[BASE DE DONNEES MULTIMEDIA]

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

NF26 Data warehouse et Outils Décisionnels Printemps 2010

TP Programmation Java / JDBC / Oracle

Olivier Mondet

Le Langage De Description De Données(LDD)

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

Les Bases de Données et l Objet Introduction

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

Optimisations des SGBDR. Étude de cas : MySQL

Information utiles. webpage : Google+ : digiusto/

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

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

Bases de données avancées

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

Bases de données avancées Introduction

Devoir Data WareHouse

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

Les bases de données

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

UML et les Bases de Données

BASES DE DONNEES ORIENTEES OBJETS BDA10.1

Création et Gestion des tables

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

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

BASES DE DONNEES TP POSTGRESQL

Bases de Données Avancées

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

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

I. MySQL : Serveur et SGBD

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

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

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

Meta Object Facility. Plan

Magasins et entrepôts de données (Datamart, data warehouse) Approche relationnelle pour l'analyse des données en ligne (ROLAP)

MODE OPERATOIRE OPENOFFICE BASE

Présentation Windows Azure Hadoop Big Data - BI

Accès aux bases de données

Introduction à la programmation concurrente

Les BASES de DONNEES dans WampServer

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

Compétences Business Objects

1. Base de données SQLite

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

Chapitre 5 LE MODELE ENTITE - ASSOCIATION

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

Objectifs du TP : Initiation à Access

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

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

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

DEVAKI NEXTOBJET PRESENTATION. Devaki Nextobjects est un projet sous license GNU/Public.

1. Introduction. Introduction au langage SQL3 (SQL 99) Plan. Sources du cours. 1. Introduction La norme SQL3 et ses composants

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

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

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

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

Paginer les données côté serveur, mettre en cache côté client

2 Serveurs OLAP et introduction au Data Mining

Transcription:

LOG660 - Bases de données de haute performance Paradigme relationnel-objet Hiver 2011 C. Desrosiers Département de génie logiciel et des TI

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 Département de génie logiciel et des TI 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 Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 3

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 Département de génie logiciel et des TI 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 Département de génie logiciel et des TI 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 Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 6

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 Département de génie logiciel et des TI 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 Département de génie logiciel et des TI 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 ville : String CREATE TYPE EditeurType AS OBJECT (nomediteur ville VARCHAR(20 1 1..* Livre {UNIQUE: ISBN} ISBN : String titre : String annéeparution : TypeDonnéesAnnée CREATE TYPE LivreType AS OBJECT (ISBN CHAR(13, titre VARCHAR(50, annéeparution TypeDonnéesAnnée, éditeur REF EditeurType CREATE TABLE Editeur OF EditeurType (PRIMARY KEY(nomEditeur CREATE TABLE Livre OF LivreType (PRIMARY KEY(ISBN, CONSTRAINT annéesup0 CHECK(annéeParution.valeurAnnée > 0, CONSTRAINT referencetableediteur éditeur SCOPE IS Editeur Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 9

Type de valeurs d'un attribut ou colonne Livre {UNIQUE: ISBN} ISBN : String titre : String annéeparution : TypeDonnéesAnnée <<datatype>> TypeDonné esannée {Integer > 0 } CREATE TYPE TypeDonnéesAnnée AS OBJECT (valeurannée INTEGER CREATE TYPE LivreType AS OBJECT (ISBN CHAR(13, titre VARCHAR(50, annéeparution TypeDonnéesAnnée, éditeur REF EditeurType CREATE TABLE Livre OF LivreType (PRIMARY KEY(ISBN, CONSTRAINT annéesup0 CHECK(annéeParution.valeurAnnée > 0, CONSTRAINT referencetableediteur éditeur SCOPE IS Editeur Département de génie logiciel et des TI 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 Département de génie logiciel et des TI 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 Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 12

Traduction d'une association un à plusieurs UML par référence simple (REF Editeur {UNIQUE: nomediteur} nomediteur : String ville : String 1 1..* Livre {UNIQUE: ISBN} ISBN : String titre : String annéeparution : TypeDonnéesAnnée CREATE TYPE LivreType AS OBJECT (ISBN CHAR(13, titre VARCHAR(50, annéeparution DomaineAnnée, éditeur REF EditeurType, Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 13

Contrainte SCOPE IS Editeur {UNIQUE: nomediteur} nomediteur : String ville : String 1 1..* Livre {UNIQUE: ISBN} ISBN : String titre : String annéeparution : TypeDonnéesAnnée CREATE TYPE LivreType AS OBJECT (ISBN CHAR(13, titre VARCHAR(50, annéeparution DomaineAnnée, éditeur REF EditeurType, CREATE TABLE Livre OF LivreType (PRIMARY KEY(ISBN, CONSTRAINT annéesup0 CHECK(annéeParution.valeurAnnée > 0, CONSTRAINT referencetableediteur éditeur SCOPE IS Editeur Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 14

Références inverses Editeur {UNIQUE: nomediteur} nomediteur : String ville : String CREATE TYPE LivreType AS OBJECT (ISBN CHAR(13, titre VARCHAR(50, annéeparution TypeDonnéesAnnée, éditeur REF EditeurType CREATE TYPE LivreRefType AS OBJECT (livreref REF LivreType CREATE TYPE tablereflivrestype AS TABLE OF LivreRefType 1 1..* Livre {UNIQUE: ISBN} ISBN : String titre : String annéeparution : TypeDonnéesAnnée CREATE OR REPLACE TYPE EditeurType AS OBJECT (nomediteur ville leslivres tablereflivrestype CREATE TABLE Editeur OF EditeurType (PRIMARY KEY(nomEditeur NESTED TABLE leslivres STORE AS tableleslivres Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 15

Représentation d'un type de données complexe ou d'une composition UML par un UDT CREATE TYPE TypeDonnéesAdresse AS OBJECT (nocivique INTEGER, numéroappartement INTEGER, nomrue nomville nomprovince nompays codepostal VARCHAR(10 Membre {UNIQUE : nomembre} nomembre : Integer nom : String prénom : String adresse : typedonnéesadresse <<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 Département de génie logiciel et des TI 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 (nomediteur ville leslivres tablelivrestype CREATE TABLE Editeur OF EditeurType (PRIMARY KEY(nomEditeur NESTED TABLE leslivres STORE AS tableleslivres Stockage à part Département de génie logiciel et des TI 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 (nomediteur ville 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 Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 18

Définition de méthodes CREATE OR REPLACE TYPE EditeurType AS OBJECT (nomediteur ville 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.éditeur.nomediteur = SELF.nomEditeur; RETURN nb; END nblivres; END; SELECT FROM WHERE e.nblivres( Editeur e e.nomediteur = 'XXX' Département de génie logiciel et des TI 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 Département de génie logiciel et des TI 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 Personn e nom : String prénom : String Utili sateur {UNIQU E :i dutil is ateur} idutil isateur : String motpasse : String Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 21

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 Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 22

Extensions au langage de manipulation de données SQL 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 Expression de chemin SELECT m.nom, m.adresse.nomrue FROM Membre m WHERE m.adresse.nomville = 'Montréal' Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 23

Cheminement par références CREATE TYPE EditeurType AS OBJECT (nomediteur ville VARCHAR(20 CREATE TYPE LivreType AS OBJECT (ISBN CHAR(13, titre VARCHAR(50, annéeparution TypeDonnéesAnnée, éditeur REF EditeurType CREATE TABLE Editeur OF EditeurType (PRIMARY KEY(nomEditeur CREATE TABLE Livre OF LivreType (PRIMARY KEY(ISBN, CONSTRAINT annéesup0 CHECK(annéeParution.valeurAnnée > 0, CONSTRAINT referencetableediteur éditeur SCOPE IS Editeur SELECT l.éditeur.nomediteur, l.isbn FROM Livre l WHERE l.éditeur.ville = 'Paris' Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 24

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.éditeur FROM Livre l WHERE l.éditeur.ville = 'Paris' Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 25

Accès à une table enchâssée par l'opérateur d'aplatissement (TABLE CREATE TYPE LivreType AS OBJECT (ISBN CHAR(13, titre VARCHAR(50, annéeparution TypeDonnéesAnnée, éditeur REF EditeurType CREATE TYPE LivreRefType AS OBJECT (livreref REF LivreType CREATE TYPE tablereflivrestype AS TABLE OF LivreRefType CREATE OR REPLACE TYPE EditeurType AS OBJECT (nomediteur ville leslivres tablereflivrestype CREATE TABLE Editeur OF EditeurType (PRIMARY KEY(nomEditeur NESTED TABLE leslivres STORE AS tableleslivres SELECT livres.livreref.isbn, livres.livreref.titre FROM TABLE (SELECT e.leslivres FROM Editeur e WHERE nomediteur = 'Addison-Wesley' livres Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 26

Insertion et constructeur d'objet CREATE TYPE EditeurType AS OBJECT (nomediteur ville CREATE TABLE Editeur OF EditeurType (PRIMARY KEY(nomEditeur INSERT INTO Editeur VALUES ('Loze-Dion', 'Longueuil' INSERT INTO Editeur VALUES (EditeurType('Loze-Dion', 'Longueuil' Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 27

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' Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 28

Colonne REF CREATE TYPE EditeurType AS OBJECT (nomediteur ville VARCHAR(20 CREATE TYPE LivreType AS OBJECT (ISBN CHAR(13, titre VARCHAR(50, annéeparution TypeDonnéesAnnée, éditeur REF EditeurType CREATE TABLE Editeur OF EditeurType (PRIMARY KEY(nomEditeur CREATE TABLE Livre OF LivreType (PRIMARY KEY(ISBN, CONSTRAINT annéesup0 CHECK(annéeParution.valeurAnnée > 0, CONSTRAINT referencetableediteur éditeur 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' Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 29

Insertion dans un NESTED TABLE CREATE TYPE LivreType AS OBJECT (ISBN CHAR(13, titre VARCHAR(50, annéeparution TypeDonnéesAnnée, éditeur REF EditeurType CREATE TYPE LivreRefType AS OBJECT (livreref REF LivreType CREATE TYPE tablereflivrestype AS TABLE OF LivreRefType CREATE OR REPLACE TYPE EditeurType AS OBJECT (nomediteur ville leslivres tablereflivrestype CREATE TABLE Editeur OF EditeurType (PRIMARY KEY(nomEditeur 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' Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 30

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 Département de génie logiciel et des TI 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("titre :"+(StringattributsDeLivre[1]; // titre VARCHAR(50 Département de génie logiciel et des TI 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 titre; protected Typedonnéesannée annéeparution; protected java.sql.ref éditeur; public LivreTypePourUDT({} // Lecteurs et modifieurs public String getisbn({ return ISBN; } public void setisbn(string isbn{ this.isbn = isbn; } // public int getlengthtitre({ return titre.length(;} public String gettitreenminuscules({return titre.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 }

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("titre :"+unlivretype.gettitre(; // titre VARCHAR(50 Département de génie logiciel et des TI 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 REPLACE TYPE TypeDonnéesAnnée AS OBJECT EXTERNAL NAME 'Typedonnéesannée' LANGUAGE JAVA USING SQLData (valeurannée INTEGER EXTERNAL NAME 'valeurannée' Outil loadjava d Oracle CREATE TYPE LivreType AS OBJECT EXTERNAL NAME 'LivreTypePourUDT' LANGUAGE JAVA USING SQLData (ISBN CHAR(13 EXTERNAL NAME 'ISBN', titre VARCHAR(50 EXTERNAL NAME 'titre', annéeparution TypeDonnéesAnnée EXTERNAL NAME 'annéeparution', éditeur REF EditeurType EXTERNAL NAME 'éditeur', 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 Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 35