Programmation dapplications Bases de données avec Java INT.

Slides:



Advertisements
Présentations similaires
Réaliser en Java un programme client d’une Base de Données
Advertisements

MySQL I / Présentation. II / Administration et Outils.
(Classes prédéfinies – API Java)
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
51 Les technologies XML Cours 6 : XML et les architectures N-tiers – Tier Métier Janvier Version 1.0 -
Les Bases de données et le Web
LICENCE MIAGE Introduction Programmation Orientée Objet JAVA philippe
Stéphane Frenot - Département Télécommunication - SID - II - Jdbc 280 JDBC Java Databases Connectivity.
PHP mySQL Extension php_mysql. Connexion à une base de données Établir une connexion mysql_connect(string server, string username, string password) –permet.
UV JDBC Module Java Expert
Les passerelles BD/WEB
TP 3-4 BD21.
Programmation dapplication INT. 2 Bases de Données Plan du document Contexteslide 1 Programmer avec une BDslide 2 Client-Serveur SQL et architecture 3.

JDBC: manipuler une base de données en Java IFT6800 – E 2007 Jian-Yun Nie.
Connexion base de données
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
Développement d’applications web
L’utilisation des bases de données
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
JDBC Java Data Base Connectivity. Java DataBase Connectivity (JDBC) Cette API est développée par Sun en collaboration avec les grands éditeurs de SGBD.
Gestion des systèmes d’information
1 Développement des Applications des Bases de Données Chapitre 6.
Principes de persistance dans les applications orienté objet
Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre.
JDBC ou comment manipuler une base de données en Java ?
L’utilisation des bases de données
Gestion des bases de données
1 Développement des Applications des Bases de Données Chapitre 6, Sections
Introduction à la programmation (Java)
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Procédures stockées CPI-SQLServer.
1 Développement des Applications des Bases de Données Chapitre 6.
1 CSI 2532 Lab5 Installation de JDBC Février 13, 2012.
1 PHP 1.Langage PHP 1.1. Types de base, variables et constantes 1.2. Opérateurs et expressions 1.3. Instructions 1.4. Fonctions 2.Accès aux bases de données:
IFT 6800 Atelier en Technologies d’information
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Chapitre 9 Les sous-programmes.
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Développement des Applications des Bases de Données Chapitre 6.
Document élaboré à Centrale Paris par Pascal Morenton LES TECHNOLOGIES DU WEB 1. LES PHASES D UN DEPLOIEMENT DE RESEAUX 2. LE LANGAGE HTML 3. LE LANGAGE.
Christine Bonnet SOURCES : « Samples » dOracle, « Oracle 8 » R. Chapuis PRO*C – C ++
Chapitre 3 Les bibliothèques de balises JSP et la JSTL
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 SQL jointure PHILIPPE BANCQUART.
JEE 5 F.Pfister 2 institut eerie JEE – Une plateforme serveur  Développement et exécution d'applications réparties.
‘‘Open Data base Connectivity‘‘
Introduction.
Juin 2006~ Brigitte Groléas ~ 1 J530 (JBD) Java : Base de Données.
Outil de gestion des cartes grises
Développement d’application client/serveur
Cours n°4M2. ESCE (S. Sidhom) Séminaire ( 6-12 Février 2007 ) Promo. M2 ESCE-Tunis 2006/07 Conception d’un système d'information sur Internet Architecture.
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Chapitre 6.2 Les curseurs Cours SGBD 3A Mme hkimi Jihène
Créer des packages.
Masters IIGLI et ILGII – Intranet internet extranet – – Claude Montacié 1 Cours n° 10 Accès distant aux bases de données.
 Requêtes MySQL en PHP Introduction
Les sockets.
Master 1 SIGLIS Intégration des données dans l’entreprise Stéphane Tallard JDBC: Java Database Connectivity Master 1 SIGLIS1JDBC.
21/04/2015© Robert Godin. Tous droits réservés.1 6Gestion des contraintes d’intégrité en SQL n Contrainte d'intégrité statique – respectée pour chacun.
Initiation au web dynamique Licence Professionnelle.
JDBC - p. 1 JDBC. JDBC - p. 2 Objectifs Fournir un accès homogène aux SGBDR Abstraction des SGBDR cibles Requêtes SQL Simple à mettre en oeuvre Core API.
02/06/2015© Robert Godin. Tous droits réservés.1 5 Interface entre SQL et un programme n SQL incomplet n Défaut d'impédance (impedance mismatch) – modèle.
Interface Java – Oracle : JDBC. I-2 JDBC (Java DataBase Connectivity) : interface API (Application Programming Interface) qui permet d’exécuter des ordres.
JDBC Présenter par: Mouctar Souleymane Bah Enseignent: Dr Amer Draâ
JDBC (Complément de cours) IFT 3030
Séance /10/2004 SGBD - Approches & Principes.
JDBC - Y. Bekkers1 Java et les SGBDR Librairies JDBC Yves Bekkers.
1 Les bases de données Séance 5 -- Le Langage de Définition de Données ou la manœuvre de la structure de la base -- Le Langage de Manœuvre de Données.
Transcription de la présentation:

Programmation dapplications Bases de données avec Java INT

2 Bases de Données Plan du document Contexteslide 3 Programmer avec une BDslide 4 JDBC slide 7 Evolutions de JDBCslide 26 Ressources en ligne

3 Bases de Données Contexte Limites du SQL interactif : Absence de structure de contrôle Absence de variable Pas de "calcul" sur les données Adopter un langage de type procédural Limites des langages de programmation sur les entrées/sorties Besoin de coupler SQL avec des langages de programmation

4 Bases de Données Interfaces SQL Lang. Prog. Embedded SQL : Précompilé Dépendant du SGBD cible Problème 2 systèmes de types, 2 styles de programmation, pas de débogage sur le source SQL/CLI : Bas niveau compilé uniquement Interface universelle SGBD SQL normalisée par l'ISO Pas implémentée par les vendeurs (Oracle implante Oracle Call Interface) PSM (Persistent Stored Modules) : Langages propriétaires PL/SQL pour Oracle (bientôt Java) "Routines"SQL Programmer avec une BD

5 Bases de Données Embedded SQL Programme source (C+SQL) Précompilation Programme sourceRequêtes BD sans cde SQL compilationTraitement code objetLibrairies Plan d'exécution LinkageStockage programme exécutableBD Programmer avec une BD DD

6 Bases de Données Interfaces SQL LPG Programmer avec une BD Niveau d'interface de programmation JavaAutres langages Embedded SQLSQLJC+SQL (Pro*C Oracle) SQL/CLIJDBCOCI (Oracle) PSMPL/SQL (Oracle) ou Java

7 Bases de Données JDBC 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

8 Bases de Données Pilotes JDBC JDBC non supporté en natif par les SGBD du commerce (ou les systèmes de fichiers) Transformations des appels JDBC en appels natifs Un pilote pour chaque SGBD 4 catégories de pilotes en fonctions de : La présence ou non de pilote SGBD (non java) sur le client Protocole de communication entre le client Java et le serveur

9 Bases de Données Fonctions possibles d'un pilote Dédié à un SGBD (peut être fourni par l'éditeur du SGBD ou une société tierce) Fournir une implémentation des interfaces Java de l'API JDBC Traduire les appels à l'API JDBC en appels vers une API native d'un SGBD (Oracle par exemple) Eventuellement peut offrir des fonctions d'accès distant au SGBD Si écrit en Java peut être téléchargeable (déploiement facile)

10 Bases de Données JDBC avec pilote Oracle (1) Appli Java Oracle ClientServeur Déploiement dapplication difficile puisque avec middleware propriétaire sur le client API JDBC Ora*net Pilote JDBC/Oracle OCI Oranet client

11 Bases de Données JDBC avec pilote Oracle en Java (2) Appli Java Oracle ClientServeur Déploiement d application facile puisque sans middleware propriétaire sur le client API JDBC Ora*net Trad. JDBC/OCI Client Oranet Pilote JDBC/Oracle

12 Bases de Données Classes et interfaces du "paquage"java.sql DriverStatementConnectionResultSetResultSetMetaDataDatabaseMetaData PreparedStatement CallableStatement Java.lang.Object Java.util.DateDriverManagerDriverPropertyInfoTypes DateTimeTimeStamp

13 Bases de Données Principes de programmation Quel que soit le gestionnaire de BD considéré, les phases de linteraction sont identiques : Charger le Driver Connexion à la base Création d'un Statement (ou PreparedStatement) Exécution de la requête (executeUpdate ou executeQuery) Récupération des résultats (ResultSet) Gestion transactionnelle (commit/abort)

14 Bases de Données Connexion JDBC Classe java.sql.Connection URL dune source de données jdbc: : jdbc:msql//athens.com:4333/db_test

15 Bases de Données Connexion à la base (suite) import java.sql.*; Class.forName("oracle.jdbc.driver.OracleDriver"); chargement dynamique de la classe implémentant le pilote Oracle String dburl = construction de lurl pour Oracle INT Connection conn = DriverManager.getConnection(dburl, "toto", "titi"); connexion à lurl avec un (user, passwd)=(toto, titi)

16 Bases de Données Création d'un Statement 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 : Statement stmt = conn.createStatement();

17 Bases de Données Execution d'une requête (1/2) 3 types d'executions : 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)

18 Bases de Données Execution d'une requête (2/2) Execution de la requête : String myQuery = "SELECT nom, adresse " + "FROM client " + "WHERE (nom=Durand') " + "ORDER BY nom"; ResultSet rs = stmt.executeQuery(myQuery);

19 Bases de Données Récupération des résultats (1/2) executeQuery () renvoit 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 dune conversion explicite Pour les types longs, on peut utiliser des streams.

20 Bases de Données Récupération des résultats (2/2) java.sql.Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1"); while (rs.next()) { // print the values for the current row. int i = rs.getInt("a"); String s = rs.getString("b"); byte b[] = rs.getBytes(3); System.out.println("ROW = " + i + " " + s + " " + b[0]); }

21 Bases de Données Correspondance de type SQL/Java

22 Bases de Données Exemple de SQL dynamique class Employe {... public static int updateEmploye(int num, String nom) throws SQLException, ClassNotFoundException { Class.forName("oracle.jdbc.driver.OracleDriver"); String dburl = Connection conn = DriverManager.getConnection(dburl, "toto", "titi"); conn.setAutoCommit(false); PreparedStatement pstmt = conn.preparedStatement("UPDATE Employe SET salary=?, name=?, WHERE numemp=?"); psmt.setNull(1); psmt.setString(2, nom); psmt.setInt(3, num); int nbLignesModifiees = psmt.executeUpdate(); if (nbLignesModifiees == 1) conn.commit(); else conn.rollback(); }

23 Bases de Données Accès aux méta-données La méthode getMetaData() permet d'obtenir les méta- données d'un ResultSet. Elle renvoit des ResultSetMetaData. On peut connaître : Le nombre de colonne : int getColumnCount() Le nom d'une colonne : String getColumnName(int col) Le type d'une colonne : int getColumnType(int col) l'entier peut être comparé aux constantes CHAR, VARCHAR, DOUBLE, DATE, INTEGER...

24 Bases de Données Exemple de MetaData class HTMLResultSet { private ResultSet rs; public HTMLResultSet (ResultSet rs){this.rs=rs;} public String toString() { StringBuffer out = new StringBuffer(); out.append(" "); ResultSetMetaData rsmd=rs.getMetaData(); int numcols=rsmd.getColumnCount(); out.append(" "); for (int i=0;i<numcols;i++) { out.append(" ").append(rsmd.getColumnName(i)); } out.append(" ");... }

25 Bases de Données JDBC et la sécurité Respecte les principes sécurité de Java Application et trusted applets : accès bases locales et serveur BD Untrusted applets ou untrusted JDBC driver connexion seulement au site de chargement

26 Bases de Données Evolution de JDBC JDBC 1.0 (janvier 1996) JDBC 2.0 (Mars 1998) JDBC 2.1 (2000) Extensions de JDBC 2.x parcours avant/arrière dun ResultSet mise à jour depuis un ResultSet batch de plusieurs ordres SQL support des types SQL3 validation 2 phases via interface XA de l'XOPEN notion de DataSource et utilisation de JNDI pool de connexion, cache sur le client

27 Bases de Données SQLJ Initiative de plusieurs éditeurs (Oracle, IBM,...) Offre une interface de plus haut niveau que JDBC (moins de code à écrire) Permet danalyser le code SQL à la compilation et donc de détecter des erreurs Peut se mixer avec du JDBC (pas de SQL dynamique p.e dans SQLJ) SQLJ compilé en JDBC

28 Bases de Données Exemples SQLJ public static void updateDuration(String projName, int numDays) throws SQLException { #sql {UPDATE projects SET duration=duration+:numDays WHERE id=:projName}; #sql {COMMIT}; } public static voidlistOpenProjects() throws SQLException { ProjIter projs=null; // déclaration de l'instance d'itérateur #sqlprojs={SELECT start_date, name FROM projects }; while(projs.next()) { System.out.println("Projet "+ projs.name() + "commence le "+projs.start_date()); } projs.close(); }

29 Bases de Données Java Blend Génération automatique de classes Java à partir dune BD relationnelle Eventuellement dans les deux sens Primitives de chargement / sauvegarde Souvent du cache en plus De nombreux éditeurs présents sur ce segment