Intégration dans un langage hôte de programmation

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

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

Bases de données avancées

Le prototype de la fonction main()

CREATION WEB DYNAMIQUE

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

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

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

Les bases de données

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

Bases de données et sites WEB

OpenPaaS Le réseau social d'entreprise

Introduction au langage C

Configurer la supervision pour une base MS SQL Server Viadéis Services

BASES DE DONNEES TP POSTGRESQL

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

Olivier Mondet

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

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

Devoir Data WareHouse

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

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

PROJET 1 : BASE DE DONNÉES REPARTIES

Gestion des transactions et accès concurrents dans les bases de données relationnelles

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

Bases de programmation. Cours 5. Structurer les données

Langage SQL : créer et interroger une base

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Java DataBaseConnectivity

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Le Langage De Description De Données(LDD)

Programmation système de commandes en C

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

Attaques applicatives

Java Licence Professionnelle CISII,

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

Gestion des utilisateurs et de leurs droits

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

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

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

1. Base de données SQLite

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

Introduction aux Bases de Données 2004/2005

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Mysql avec EasyPhp. 1 er mars 2006

A QUOI SERVENT LES BASES DE DONNÉES?

Rappels Entrées -Sorties

Programmation système I Les entrées/sorties

Le langage C. Séance n 4

INFO-F-404 : Techniques avancées de systèmes d exploitation

1 Introduction et installation

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

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

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

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

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

Les structures. Chapitre 3

Systèmes d informations nouvelles générations. Répartition, Parallèlisation, hétérogénéité dans les SGBD. Exemple d application d un futur proche

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

Cours Programmation Système

Bases de données relationnelles

CHAPITRE 4 POLITIQUES DE CONTRÔLES DES ACCÈS SOUS ORACLE ADMINISTRATION ET TUNING DE BASES DE DONNÉES 10/05/2015 RESPONSABLE DR K.

LE LANGAGE SQL2 1. INTRODUCTION

PHP et les Bases de données - Généralités

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

Le langage SQL Rappels

Installation d'un serveur FTP géré par une base de données MySQL

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

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

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

Algorithmique et Programmation, IMA

Pratique et administration des systèmes

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

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

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)

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

Java et les bases de données

Création et Gestion des tables

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN

TP3 : Creation de tables 1 seance

BTS/CGO P10 SYSTEME INFORMATION Année

A QUOI SERVENT LES BASES DE DONNÉES?

Intégrité des données

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

Le langage procédural PL-PGSQL

SQL Historique

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

Initiation. àl algorithmique et à la programmation. en C

Gestion de base de données

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

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)

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

Bases de Données Avancées PL/SQL

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

Les chaînes de caractères

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

Résumé S Q L. Auteur: Alexandre PATIN Edition: 22 février alexandre.patin@free.fr URL :

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

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

Transcription:

Le langage SQL Intégration dans un langage hôte de programmation 1/32 Utilité Le mode interactif ne convient pas: Lors de tâches répétitives sur un grand volume de données Lorsque les utilisateurs ne possèdent pas les connaissances SQL Certaines limites SQL sont atteintes (récursivité) Le mode intégréconsiste àutiliser SQL àpartir d un langage de programmation classique appelélangage hôte : Langage C Java Etc. 2/32 1

Déploiement des SGBD Architecture Client-Serveur SERVEUR Il réalise les tâches exigeant beaucoup de mémoire, de puissance CPU et d espace disque. Ces tâches sont réalisées sur une machine dotée des ressources en conséquence. CLIENTS Ils réalisent les tâches peu exigeantes en mémoire, en puissance CPU et en espace disque. Ces tâches sont réalisées sur une machine dotée de ressources standards. Les clients et le serveur communiquent via le réseau. L ensemble {Clients + Serveur forme l application complète Cette architecture est utilisée par de très nombreuses applications: WEB Courrier électronique Transfert de fichiers VOD SGBD 3/32 Déploiement des SGBD Client 1 SGBD Client 2 SGBD Serveur SGBD RESEAU Client 3 SGBD L utilisation d une BD est toujours précédée d une connexion du client au serveur Client n SGBD 4/32 2

Principe d intégration de SQL dans un langage hôte Un programme sera constituéàla fois de: lignes de code écrites dans la syntaxe du langage hôte lignes écrites dans la syntaxe SQL Ce programme fera l objet d un pré-traitement avant sa compilation Les lignes SQL seront remplacées par des lignes conforme à la syntaxe du langage hôte afin de rendre la compilation possible. La notion de curseur est ajoutée àsql afin de pouvoir parcourir et traiter un ensemble de tuples résultant de l exécution d une requête. Une variable SQLCODEpermet de récupérer dans le programme des informations sur le déroulement d une requête SQL 5/32 Principe d intégration de SQL dans un langage hôte Programme Programme Programme Pré processeur Compilateur lignes de code écrites dans la syntaxe du langage hôte lignes écrites dans la syntaxe SQL lignes écrites dans la syntaxe SQL remplacées par des lignes dans la syntaxe du langage hôte code binaire 6/32 3

Principe d intégration de SQL dans un langage hôte Exemple en C int main(){ exec sql insert into joueur values ('Noah', 'Yannick', 26, 'France'); return(0); Chaque instruction SQL est repérée dans le programme hôte par les mots EXEC SQL /* main */ Pré processeur int main(){ {ECPGdo( LINE, 0, 1, NULL, 0, ECPGst_normal, "insert into joueur values ( 'Noah', 'Yannick', 26, 'France' )", ECPGt_EOIT, ECPGt_EORT); return(0); /* main */ 7/32 Variables hôtes Variables du langage hôte utilisées par les instructions SQL Déclarées dans le programme hôte entre: EXEC SQL BEGIN DECLARE SECTION EXEC SQL END DECLARE SECTION Les types utilisés : sont ceux du langage hôte le type spécial VARCHAR doivent être compatibles avec les types SQL des attributs de la BD Préfixées par le caractère : lors de leur utilisation dans une requête SQL 8/32 4

Variables hôtes (suite) Exemple 1 varchar nom[20]; /* Le type varchar n existe pas en C */ char prenom [16]; /* 15 + 1 pour le \0 */ int age; char nationalite[16]; /* 15 + 1 pour le \0 */ int main(){ return(0); /* main */ Pré processeur int len; char arr[ 20 ]; nom; char prenom [16]; int age; char nationalite [16]; int main(){ return(0); /* main */ 9/32 Variables hôtes (fin) Exemple 2 varchar nom[20]; char prenom [16]; /* 15 + 1 pour le \0 */ int age; char nationalite[16]; /* 15 + 1 pour le \0 */ int main(){ printf("nom joueur? "); scanf("%s", nom.arr); nom.len=strlen(nom.arr); printf("prénom joueur? "); scanf("%s", prenom); printf("age joueur? "); scanf("%d", &age); printf("nationalité joueur? "); scanf("%s", nationalite); exec sql insert into joueur values (:nom, :prenom, :age, :nationalite); return(0); /* main */ 10/32 5

Curseur Utiliséafin d itérer un traitement sur un ensemble de tuples produit par une requête SQL Déclaré dans le programme hôte: exec sql declare Nom_Curseur cursor for requête_sql; Associe le nom du curseur à une requête SQL Ouvert par le programme hôte avant son utilisation: exec sql open Nom_Curseur; Provoque l envoi au serveur de la requête SQL associée au curseur puis la réception par le client du résultat de la requête 11/32 Curseur (fin) Fermé par le programme hôte après son utilisation: exec sql close Nom_Curseur; Libère la mémoire occupée par l ensemble des tuples du résultat de la requête Les variables hôtes sont valuées à chaque déplacement du curseur exec sql fetch from Nom_Curseur into :V 1,,:V n ; Une variable nommée SQLCODE permet de contrôler l itération du traitement sur les tuples De façon générale, SQLCODE, permet de récupérer dans le programme des informations sur le déroulement d une requête SQL (échec, succès, etc) 12/32 6

Curseur exemple char prenom [16]; int age; printf("%s %s %d\n", nom.arr, prenom, age); 13/32 Curseur exemple (2) char prenom [16]; int age; (1) select nom, prenom from joueur; 14/32 7

Curseur exemple int len; 7 char prenom [16]; Jimmy char arr[20]; Connors int age; 45 nom 15/32 Curseur exemple int len; 7 char prenom [16]; Jimmy char arr[20]; Connors int age; 45 nom Connors Jimmy 45 16/32 8

Curseur exemple int len; 5 char prenom [16]; Eric char arr[20]; Fromm int age; 42 nom Connors Jimmy 45 17/32 Curseur exemple int len; 5 char prenom [16]; Eric char arr[20]; Fromm int age; 45 nom Connors Jimmy 45 Fromm Eric 42 18/32 9

Curseur exemple int len; 6 char prenom [16]; Boris char arr[20]; Becker int age; 49 nom Connors Jimmy 45 Fromm Eric 42 19/32 Curseur exemple int len; 6 char prenom [16]; Boris char arr[20]; Becker int age; 49 nom Connors Jimmy 45 Fromm Eric 42 Becker Boris 49 20/32 10

Curseur exemple int len; 6 char prenom [16]; Boris char arr[20]; Becker int age; 49 nom Connors Jimmy 45 Fromm Eric 42 Becker Boris 49 21/32 Curseur exemple int len; 6 char prenom [16]; Boris char arr[20]; Becker int age; 49 nom Connors Jimmy 45 Fromm Eric 42 Becker Boris 49 22/32 11

Curseur exemple int len; 6 char prenom [16]; Boris char arr[20]; Becker int age; 49 nom Connors Jimmy 45 Fromm Eric 42 Becker Boris 49 23/32 Connexion déconnexion Etablir la connexion entre le client et le serveur: exec sql connect to target [user user_name]; target peut prendre plusieurs forme (cf. documentation), la plus fréquente étant: dbname[@hostname][:port] user_name peut prendre plusieurs forme (cf. documentation), les plus fréquentes étant: username username/password username IDENTIFIED BY password username USING password Fermer la connexion avec le serveur: exec sql disconnect [connection[ connectioṉ- name DEFAULT CURRENT ALL] Libère les ressources chez le client et le serveur 24/32 12

#include <stdio.h> char prenom [16]; int age; Exemple complet exec sql include sqlca; exec sql connect to MaBD@Machine_Serveur user login" using Mot de passe ; for select nom, prenom from joueur; printf("nom joueur? "); scanf("%s", &nom.arr); nom.len=strlen(nom.arr); printf("prénom joueur? "); scanf("%s", &prenom); printf("age joueur? "); scanf("%d", &age); printf("nationalité joueur? "); scanf("%s", &nationalite); exec sql insert into joueur values (:nom, :prenom, :age, :nationalite); exec sql disconnect; 25/32 Programme type /* ==== déclaration éventuelle de variables hôtes ====== */ V 1,.. V N /* ===== include propre à SQL ===== */ exec sql include nom_include /* ===== connexion à la BD ===== */ exec sql connect to "nom BD"; /* ===== déclaration éventuelle des curseurs ===== */ exec sql declare nom_curseur cursor for requête; /* ===== ouverture éventuelle des curseurs ===== */ exec sql open nom_curseur ; 26/32 13

Programme type (fin) /* ===== positionnement du curseur sur le 1er tuple du resultat = */ exec sql fetch from nom_curseur into :V 1, :V 2,, :V N ; /* == itération sur les tuples du resultat tant que SQLCODE vaut 0 == */ /* ===== traitement d un tuple ===== */.. /* === positionnement du curseur sur tuple suivant === */ exec sql fetch from nom_curseur into :V 1, :V 2,, :V N ; /* ===== fin de l itération sur les tuples du resultat ============== */ /* ===== fermeture du curseur ===== */ exec sql close nom_curseur ; /* ===== déconnexion ===== */ exec sql disconnect; 27/32 SQL Dynamique Utilisélorsque tous les paramètres d une requête SQL ne sont pas connus au moment de la compilation Les paramètres manquant seront connus au moment de l exécution Surtout utile pour les SELECT qui retournent un résultats composé de plusieurs lignes Utilisable néanmoins pour INSERT, UPDATE et DELETE Utilisation de la clause PREPARE 28/32 14

SQL Dynamique - exemple int age, age_min, age_max; char *select1 = "select nom, anneenaissance " " from joueur " " where age >=? and age <=?";... exec sql prepare st_select1 from :select1; for st_select1; printf("age min du joueur? "); scanf("%d", &age_min); printf("age max du joueur? "); scanf("%d", &age_max); exec sql open C using :age_min, :age_max; exec sql fetch from C into :nom, :age; printf("%s %d\n", nom.arr, age); exec sql fetch from C into :nom, :age;... 29/32 SQL Dynamique - exemple $./consult_bdtennis_dyn Annee de naissance min du joueur? 1970 Annee de naissance max du joueur? 1990 Chang 1972 Bruguera 1971 Courier 1970 (3 ligne(s)) $./consult_bdtennis_dyn Annee de naissance min du joueur? 2000 Annee de naissance max du joueur? 2015 (0 ligne(s)) 30/32 15

Gestion des erreurs Principe L envoi d une requête SQL au serveur provoque en retour la valuation de la variable sqlca.sqlcode si sqlca.sqlcode < 0 L exécution de la requête a échoué La variable sqlca.sqlerrm.sqlerrmc contient un message sur la nature du problème ayant causé l échec de la requête si sqlca.sqlcode = 0 La requête s est exécutée sans problème 31/32 Gestion des erreurs - exemple // ----------------------------------------------- void printsqlerror (char *usermessage){ // ----------------------------------------------- // Affiche un message en cas d erreur d exécution // d une requête SQL // -------------------------------------------- printf ("%d: %s, %s\n", sqlca.sqlcode, usermessage, sqlca.sqlerrm.sqlerrmc); // printsqlerror... exec sql connect to MaBD@Machine_Serveur user login" using Mot de passe ; if (sqlca.sqlcode < 0) {printsqlerror ("Erreur connect"); exit (EXIT_FAILURE);... exec sql open C using :age_min, :age_max; exec sql fetch from C into :nom, :age; if (sqlca.sqlcode<0) {printsqlerror ("Erreur exec sql fetch from C"); exit (EXIT_FAILURE); printf("%s %d\n", nom.arr, age); exec sql fetch from C into :nom, :age; if (sqlca.sqlcode<0) {printsqlerror ("Erreur exec sql fetch from C"); exit (EXIT_FAILURE);... 32/32 16