8. Java et les bases de données. Olivier Curé - UMLV [page 206 ]



Documents pareils
Java DataBaseConnectivity

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

Accès aux bases de données

TP Programmation Java / JDBC / Oracle

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: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Programmation d application Bases de données avec Java

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

OpenPaaS Le réseau social d'entreprise

Java - MySQL. Code: java-mysql

1. Langage de programmation Java

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

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)

Java et les bases de données

INSTALLATION DE L APPLICATION DU CONTEXTE ITASTE

JDBC le langage Java XVI-1 JMF

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

Java Database Connectivity (JDBC) - Langage SQL

Cours: Administration d'une Base de Données

Application web de gestion de comptes en banques

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

Construire une base de donnée pour bibliothèque

Logiciel de gestion de caisse et d ardoises

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

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

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

Paradox 9. Guide de l utilisateur jpdox Web Utilities

FileMaker 10. Guide ODBC et JDBC

FileMaker 13. Guide ODBC et JDBC

JDBC JDBC. Java DataBase Connectivity

PDO : PHP Data Object 1/13

Olivier Mondet

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

Dialogue avec la base de données

CREATION WEB DYNAMIQUE

PHP. PHP et bases de données

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

PHP 4 PARTIE : BASE DE DONNEES

Le Langage SQL version Oracle

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

RMI le langage Java XII-1 JMF

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

Le Langage De Description De Données(LDD)

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

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

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

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

Panorama des Bases de Données

Optimisations des SGBDR. Étude de cas : MySQL

LES ACCES ODBC AVEC LE SYSTEME SAS

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Applet pour visualiser les variables «automate» notifiées

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

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

Raja Bases de données distribuées A Lire - Tutoriel

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é

Test de HSQLDB et Comparatif avec Sqlite

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

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)

I. MySQL : Serveur et SGBD

contact@nqicorp.com - Web :

Notion de base de données

Thierry Déléris. BMC Mainview Data Server Synthèse & Mise en œuvre

Tutoriel d installation de Hibernate avec Eclipse

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

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

La base de données XML exist. A. Belaïd

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

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Pratique et administration des systèmes

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

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

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

Compte Rendu d intégration d application

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

Architecture de la plateforme SBC

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

Bases de données relationnelles

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)

FileMaker Server 14. Guide de démarrage

Programmer en JAVA. par Tama

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

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Programme détaillé. Administrateur de Base de Données Oracle - SQLServer - MySQL. Objectifs de la formation. Les métiers

Stockage du fichier dans une table mysql:

Remote Method Invocation (RMI)

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

Information utiles. webpage : Google+ : digiusto/

Architectures web/bases de données

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

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

Création d une application JEE

as Architecture des Systèmes d Information

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

1. Base de données SQLite

SQL Historique

Les Utilisateurs dans SharePoint

Transcription:

8. Java et les bases de données Olivier Curé - UMLV [page 206 ]

Java et les BD Plusieurs manières d'écrire du code Java accédant à une BD: Statement Level Interface (SLI) Solutions : SQLJ (SQL92) Call Level Interface (CLI) JDBC (SQL 2003) Olivier Curé - UMLV [page 207 ]

SLI vs CLI SLI nouvelles déclarations dans le programme Précompilation des constructions SQL dans le langage hôte 2 constructions: SQL statitque ou dynamique (dans les String) Interactions avec SGBD fixées à la compilation Portabilité difficile vers d'autres SGBD Communication en 1 passe CLI Requête SQL dans des variables String pas de précompilation Interactions avec SGBD fixées au runtime portabilité facile Communication en 2 passes (envoi + récupération des résultats) Olivier Curé - UMLV [page 208 ]

ODBC Open DataBase Connectivity. Une API standard pour l'accès aux bases de données. En utilisant des instructions ODBC dans un programme, on peut accéder à de nombreux SGBD. Permet au programme l'exploitation de SQL. ODBC gère une requête SQL et transforme celleci dans un format compréhensible par le SGBD. Olivier Curé - UMLV [page 209 ]

JDBC Java DataBase Connectivity. Une API Java pour connecter des programmes java à des SGBD. Un ensemble de classes et interfaces java. JDBC va permettre D'établir une connexion à la BD. D'envoyer des requêtes SQL. De récupérer les résultats des requêtes. Olivier Curé - UMLV [page 210 ]

JDBC (2) Il faut charger un driver pour le SGBD. Il est possible d'utiliser l'interface JDBC pour accéder aux BD accessibles via ODBC => "pont" JDBC-ODBC. Olivier Curé - UMLV [page 211 ]

JDBC (3) Etapes : Importer le package (import java.sql.*;). Faire connaître le pilote JDBC du SGBD Ouvrir une connexion à la BD. Créer un objet 'Statement'. Exécuter une requête et obtenir un objet ResultSet. Fermer les objets ResultSet et Statement. Fermer la connexion à la BD. Olivier Curé - UMLV [page 212 ]

Pilote JDBC Le pilote JDBC est un composant logiciel qui satisfait aux spécifications JDBC établies par Sun. Ce pilote est spécifique à un fabriquant de base de donnée. On trouvera par exemple un pilote pour les bases de données Oracle, un pilote pour la base MySQL. On traite dans ce cours du SGBDR MySQL. Ce pilote est une classe Java qui implémente l interface java.sql.driver. Pour le driver MySQL, cette classe est : com.mysql.jdbc.driver. Nous devons donc charger cette classe. Pour cela, la méthode Class.forName() est généralement utilisée (cf. Page suivante). Olivier Curé - UMLV [page 213 ]

Chargement du pilote Il convient d'importer le package java.sql import java.sql.*; public class QueryExample {... try { Class.forName("com.mysql.jdbc.Driver"); catch (ClassNotFoundException e) { System.err.println("Driver loading error : " + e);... Olivier Curé - UMLV [page 214 ]

URL de connection Afin de localiser la base de donnée sur le serveur de base de donnée, il est indispensable de spécifier une adresse de connexion sous la forme d'une URL. Ces URL commenceront toutes par "jdbc:". Généralement, il faudra se référer à la documentation du fournisseur du driver afin de connaître le format de l'url à utiliser. Pour MySQL, l'url est la suivante : jdbc:mysql://host:port/database. Host : correspond à l'adresse IP du serveur. port : port MySQL ou port par défaut. Database : le nom de la base de donnée à laquelle on doit se connecter. Olivier Curé - UMLV [page 215 ]

Etablir une connexion Etablir une connexion en utilisant la classe java.sql.drivermanager. Son rôle est de créer des connexions en utilisant le driver préalablement chargé. Cette classe dispose d'une méthode statique getconnection() prenant en paramètre l'url de connexion, le nom d'utilisateur et le mot de passe. String url = "jdbc:mysql://localhost/tp"; try { Connection connection = DriverManager.getConnection(url, "root", "secret"); catch (SQLException e) { System.err.println("Error opening SQL connection: " + e.getmessage()); Olivier Curé - UMLV [page 216 ]

Les requêtes Afin d'exécuter des requêtes, il convient d'utiliser un object Statement. Une instance de cet objet est retourné par un appel à la méthode Connection.createStatement() : try { Statement statement = connection.createstatement(); catch (SQLException e) { System.err.println("Error creating SQL statement: " + e.getmessage()); Olivier Curé - UMLV [page 217 ]

Les requêtes (2) Il existe deux types de requêtes : des requêtes de sélection (SELECT), accessibles par la méthode Statement.executeQuery(). Cette méthode retourne un résultat de type java.sql.resultset contenant les lignes sélectionnées. des requêtes de modification (UPDATE), d'insertion (INSERT) ou de suppression (DELETE), accessibles par la méthode Statement.executeUpdate(). Cette méthode retourne un résultat de type int correspondant au nombre de lignes affectées par la requête. Olivier Curé - UMLV [page 218 ]

Les requêtes (3) String query = "SELECT name,email FROM users;"; try { ResultSet resultset = statement.executequery(query); catch (SQLException e) { System.err.println("Error executing query: " + e.getmessage()); String query = "UPDATE users SET email='john_smith@aol.com' WHERE name='john SMITH';"; try { int result = statement.executeupdate(query); catch (SQLException e) { System.err.println("Error executing query: " + e.getmessage()); Olivier Curé - UMLV [page 219 ]

Traitement des résultats L'objet ResultSet permet d'avoir un accès aux données résultantes de notre requête en mode ligne par ligne. La méthode ResultSet.next() permet de passer d'une ligne à la suivante. Cette méthode renvoie false dans le cas où il n'y a pas de ligne suivante. Il est nécessaire d'appeler au moins une fois cette méthode, le curseur est placé au départ avant la première ligne (si elle existe). Olivier Curé - UMLV [page 220 ]

Traitement des résultats (2) La classe ResultSet dispose aussi d'un certain nombres d'accesseurs (ResultSet.getXXX()) qui permettent de récupérer le résultat contenu dans une colonne sélectionnée. On peut utiliser soit le numéro de la colonne désirée, soit son nom avec l'accesseur. La numérotation des colonnes commence à 1. XXX correspond au type de la colonne. Le tableau suivant précise les relations entre type SQL, type JDBC et méthode à appeler sur l'objet ResultSet. Olivier Curé - UMLV [page 221 ]

Les types Type SQL Type JDBC Méthode d'accès char String getstring() varchar String getstring() integer Integer getint() double, Double getdouble() float Float getdouble() Date Date getdate() Blob Blob getblob() Olivier Curé - UMLV [page 222 ]

try { Exemple while (rs.next()) { System.out.println(rs.getString("NAME") + " " + rs.getstring("email")); catch (SQLException e) { System.err.println("Error browsing query results: " + e.getmessage()); Olivier Curé - UMLV [page 223 ]

Fermeture de la connexion Objectif : Libérer les ressources try { resultset.close(); connection.close(); catch (SQLException e) { System.err.println("Error closing connection: " + e.getmessage()); Olivier Curé - UMLV [page 224 ]

Exemple 'SELECT' import java.sql.*; public class Query1 { public Query1() { String url = "jdbc:mysql://localhost:3306/film"; // film est le nom de la base de donne'es Connection con; String query = "SELECT director,nat from director;"; Statement stmt; try { Driver mysqldriver = new org.gjt.mm.mysql.driver(); con = DriverManager.getConnection(url,"o","ol" ); System.out.println("Con = " + con); stmt = con.createstatement(); Olivier Curé - UMLV [page 225 ]

Exemple 'SELECT' (2) ResultSet rs = stmt.executequery(query); while (rs.next()) { System.out.println(rs.getString(1)+" ("+rs.getstring(2)+")"); stmt.close(); con.close(); catch(sqlexception ex) { System.err.println("SQLException: " + ex.getmessage()); public static void main(string args[]) { Query1 query1 = new Query1(); Olivier Curé - UMLV [page 226 ]

Instruction SQL paramétrée La plupart des SGBD (dont Oracle) ne peuvent analyser qu'une seule fois une requête exécutée un grand nombre de fois JDBC permet de profiter de ce type de fonctionnalité par l'utilisation de requêtes paramétrées ou de procédures stockées. Les requêtes paramétrées sont associées aux instances de l'interface PreparedStatement qui hérite de l'interface Statement Olivier Curé - UMLV [page 227 ]

Création d'une requête paramétrée PreparedStatement pstmt = conn.preparedstatement("update emp SET sal=? WHERE nom=?;"); Les '?' indiquent les emplacements des paramètres. Les valeurs des paramètres sont données par les méthodes setxxx(n,valeur). On choisit la méthode setxxx suivant le type SQL de la valeur que l'on veut mettre dans la requête. C'est au développeur de passer une valeur Java cohérente avec le type. Olivier Curé - UMLV [page 228 ]

Requête paramétrée - Exemple PreparedStatement pstmt = conn.preparedstatement("update emp SET sal=? WHERE nom=?;"); for(int i=1; i<=10,i++) { pstmt.setdouble(i, salaire[i]); pstmt.setstring(i,nom[i]); pstmt.executeupdate(); On peut passer la valeur NULL avec setnull (n,type) (type de la classe Types). Olivier Curé - UMLV [page 229 ]

Avantages des requêtes paramétrées Traitement plus rapide si elles sont utilisées plusieurs fois avec plusieurs paramètres. Amélioration de la portabilité (indépendance des setxxx avec les SGBD). Olivier Curé - UMLV [page 230 ]