Cours 3 : JDBC. Java DataBase Connectivity

Documents pareils
Java DataBaseConnectivity

Programmation d application Bases de données avec Java

TP Programmation Java / JDBC / Oracle

Accès aux bases de données

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

1. Langage de programmation Java

JDBC le langage Java XVI-1 JMF

JDBC JDBC. Java DataBase Connectivity

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 Database Connectivity (JDBC) - Langage SQL

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

Java - MySQL. Code: java-mysql

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

Création et Gestion des tables

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

Java et les bases de données

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

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

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

Tutoriel d installation de Hibernate avec Eclipse

Olivier Mondet

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

Programmer en JAVA. par Tama

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

CREATION WEB DYNAMIQUE

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)

Le Langage De Description De Données(LDD)

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

as Architecture des Systèmes d Information

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

Création d une application JEE

Cours 1: Java et les objets

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Package Java.util Classe générique

FileMaker 10. Guide ODBC et JDBC

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

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

Une introduction à Java

Exercices sur SQL server 2000

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

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

TP Contraintes - Triggers

Bases de données avancées

Programmation Objet Java Correction

Plan du cours. Historique du langage Nouveautés de Java 7

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

Optimisations des SGBDR. Étude de cas : MySQL

Les BASES de DONNEES dans WampServer

Application web de gestion de comptes en banques

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

PROGRAMMATION PAR OBJETS

FileMaker 13. Guide de référence SQL

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é

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

[BASE DE DONNEES MULTIMEDIA]

Java Licence Professionnelle CISII,

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

Java Licence Professionnelle CISII,

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

SQL Historique

Modélisation et Gestion des bases de données avec mysql workbench

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

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

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

Corrigés détaillés des exercices

Construire une base de donnée pour bibliothèque

Programme Compte bancaire (code)

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

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

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

Chapitre 10. Les interfaces Comparable et Comparator 1

Introduction à ADO.NET

1/ Présentation de SQL Server :

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

Threads. Threads. USTL routier 1

Java au cœur de la base de données Oracle

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Introduction au langage Java

Eclipse atelier Java

Dialogue avec la base de données

Applet pour visualiser les variables «automate» notifiées

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

TP1 : Initiation à Java et Eclipse

JAVA. Introduction à la programmation objet avec java 1/4. Nadir BOUSSOUKAIA

Création d un service web avec NetBeans 5.5 et SJAS 9

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Java 1.5 : principales nouveautés

Historisation des données

Présentation Windows Azure Hadoop Big Data - BI

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

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

Paradox 9. Guide de l utilisateur jpdox Web Utilities

1. Base de données SQLite

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

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

Transcription:

Cours 3 : JDBC Java DataBase Connectivity

JDBC Une API (Application Programming Interface) qui permet d exécuter des instructions SQL JDBC fait partie du JDK (Java Development Kit) Toutes les classes et interfaces sont dans le package java.sql : import java.sql.* 2

JDBC Java.lang.Object java.util.date DriverManager DriverPropertyInfo Types Date Time Timestamp Les classes du package java.sql 3

JDBC Driver Statement Connection ResultSet ResultSetMetaData PreparedStatement DatabaseMetaData CallableStatement Les interfaces du package java.sql 4

JDBC : structure d un programme 1. On établit une connexion avec une source de données 2. On effectue des requêtes 3. On utilise les données obtenues pour des affichages, des traitements statistiques etc. 4. On met à jour les informations de la source de données 5. On termine la connexion 6. Eventuellement, on recommence en 1 5

1. Connexion Pour établir une connexion à une base de données, il faut : 1. Connaître son nom 2. Lui associer un pilote (ou driver) Pour charger l adresse des pilotes : EXPORT CLASSPATH = nomfichier:.:$classpath 6

Déclaration du driver Pour charger un driver, on peut utiliser la méthode Class.forName(String) Pilote utilisé à l IUT : oracle.jdbc.driver.oracledriver Emplacement des archives : C:\oracle\product\11.2.0\client_1\jdbc\lib \ojdbc6 Pour charger les archives sous Eclipse : Avec l onglet «Libraries», choisir «Add external jars» 7

Exemple (jusqu ici) import java.sql.*; public class premiereconnexion { public static void main(string[] args){ try{ } Class.forName("oracle.jdbc.driver.OracleDriver"); catch (ClassNotFoundException e){ } System.out.println( "Impossible de charger le pilote"); System.exit(1); System.out.println("Pilote chargé"); } } 8

Nommage des bases de données : les URL <protocole>:<sous-protocole>:<compléments> Protocole : jdbc Sous-protocole : le driver. Tous les drivers distribués par Oracle commencent par oracle: (oracle:thin, oracle:oci7, oracle:oci8, ). A l IUT, on utilise oracle:thin Compléments identifie la base de données : login/motdepasse@ordinateur:port:base Exemple : String url = "jdbc:oracle:thin:ffioren/mdp@ oracle.iut-orsay.fr:1521:etudom" 9

Etablir la connexion On utilise la méthode getconnection() de la classe DriverManager avec comme argument l URL : Connection maconnexion = DriverManager.getConnection(url); ou bien Connection maconnexion = DriverManager.getConnection(url,"ff ioren","mdp"); 10

}... Exemple (suite) catch (ClassNotFoundException e){... } String url = "jdbc:oracle:thin:ffioren/mdp"; url+="@oracle.iut-orsay.fr:1521:etudom"; Connection maconnexion = null; try{ maconnexion = DriverManager.getConnection(url); } catch (SQLException e){ }...} System.out.println( "Impossible de se connecter à l url : "+url); System.exit(1); Bases de données 11

2. Déclaration et exécution de la requête Il faut tout d abord demander la création du statement Statement moninstruction = maconnexion.createstatement(); Ensuite il faut déclarer le code SQL de la requête ResultSet monresultat = moninstruction.executequery(marequête); 12

Exemple (suite) public static void main(string[] args) throws SQLException{... Connection maconnexion = DriverManager.getConnection(url); Statement moninstruction = ResultSet monresultat = maconnexion.createstatement(); moninstruction.executequery( "select numfilm, titre from ens2004.film where titre like 'A%'");...} } 13

3. Exploitation des résultats On peut parcourir les lignes de l objet ResultSet avec la méthode next(). Cette méthode renvoie VRAI s il reste des lignes à lire et FAUX sinon : while(monresultat.next()){ traitement des données récupérées } 14

... ResultSet monresultat = Exemple (suite) moninstruction.executequery( "select numfilm, titre from ens2004.film where "); while(monresultat.next()){ } String titre = monresultat.getstring("titre"); int numero = monresultat.getint("numfilm"); System.out.print(numero + "\t" + titre); System.out.println(" ");...}} 15

... ResultSet monresultat = Exemple (suite) moninstruction.executequery( "select numfilm, titre from ens2004.film where "); while(monresultat.next()){ } String titre = monresultat.getstring(2); int numero = monresultat.getint(1); System.out.print(numero + "\t" + nom); System.out.println(" ");...}} 16

... ResultSet monresultat = Exemple (suite) moninstruction.executequery( "select numfilm, titre from ens2004.film where "); while(monresultat.next()){ } System.out.print(monresultat.getInt(1) + "\t" + monresultat.getstring(2)); System.out.println(" ");...}} 17

... ResultSet monresultat = Exemple (suite) moninstruction.executequery( "select numfilm, titre from ens2004.film where "); while(monresultat.next()){ } System.out.print(monresultat.getString(1) + "\t" + monresultat.getstring(2)); System.out.println(" ");...}} 18

Cas des valeurs nuls Un null Java peut être renvoyé par les méthodes qui retournent un objet : getstring(), getobject(), getdate(), Un 0 peut être renvoyé par les méthodes qui retournent une valeur numérique : getint(), getbyte(), getshort(),... Une valeur FAUX peut être renvoyée par la méthode getboolean(). wasnull() : méthode de ResultSet isnullable() : méthode de ResultSetMetaData 19

4. Accès en mise à jour En outre de l exécution d un select avec executequery, on peut aussi exécuter un update, un insert ou un delete : Statement moninstruction = maconnexion.createstatement(); int monresultat = moninstruction.executeupdate(marequête); 20

... Exemple (suite) while(monresultat.next()){... }... int num = 1112; String client = "charlie";... int nblignes = moninstruction.executeupdate( "INSERT INTO location(numexemplaire, login, datelocation) VALUES("+num+",'"+client +"',SYSDATE)"); System.out.println(nbLignes + " ligne(s) inserée(s).");...}} 21

Gestion des transactions Par défaut, autocommit on Pour modifier ce mode on appel la méthode setautocommit() de la classe Connection (paramètres true et false) Pour valider ou annuler on appel les méthodes commit() et rollback() de la classe Connection 22

5. Déconnexion Libérer les objets ResultSet et Statement : monobjet.close(); Fermer la connexion : maconnexion.close(); 23

Exemple (suite et fin)... ResultSet monresultat =...... while(monresultat.next()){... }... monresultat.close();... int num = 1112; String client = "charlie";... System.out.println(nbLignes+" ligne(s)inserée(s)."); moninstruction.close(); maconnexion.close(); }//main }//premiereconnexion 24

Interface ResultSetMetaData Elle fournit des informations concernant les types et les propriétés des colonnes d une instance de ResultSet Combien d attributs contient le ResultSet? Les noms des attributs sont-ils sensibles à la casse? Est-il possible de rechercher des données dans la colonne de son choix? Est-il possible d affecter la valeur NULL à un attribut? Quel est le nombre maximal de caractères affichables pour un attribut donné? Quel est le nom d un attribut? A quelle table appartient un attribut? De quel type est un attribut? 25

getcatalogname() Contenu de l interface getcolumnclassname() getcolumncount() getcolumndisplaysize() getcolumnlabel() getcolumnname() getcolumntype() getcolumntypename() getprecision() getscale() getschemaname() ResultSetMetaData gettablename() isautoincrement() iscasesensitive() iscurrency() isdefinitelywritable() isnullable() isreadonly() issearchable() issigned() iswritable() 26

Exemple ResultSet monresultat = moninstruction.executequery("select numfilm, titre from ens2004.film"); ResultSetMetaData rsmd = monresultat.getmetadata(); int nombredecolonnes = rsmd.getcolumncount(); for(int i=1; i<=nombredecolonnes; i++){ String nomcolonne = rsmd.getcolumnname(i); String nomtype = rsmd.getcolumntypename(i); System.out.println("La colonne "+i+" est " +nomcolonne+" dont le nom de type Oracle est " +nomtype); } 27

Interface PreparedStatement Elle permet de transférer une seule fois le code SQL d une requête au serveur de façon à en accélérer l exécution lorsqu on veut répéter plusieurs fois cette requête (un seule «compilation» et un seul calcul d un plan de requête) Nom de classe : java.sql.preparedstatement Classe mère : java.sql.statement Sous-classe directe : java.sql.callablestatement Disponible depuis la version 1.1 du JDK 28

Ville numville nomville numpays Pays numpays nompays formalite vaccin Exemple Etape numvoyage numville numordre duree Tarif numvoyage datedeb prix Voyage numvoyage nomvoyage nbmin nbmax typepension 29

Exemple (2) PreparedStatement pst = maconnexion.preparestatement( "select numvoyage from tarif where datedeb > '01-07-2017' and prix < 1000"); ResultSet monresultat = pst.executequery(); while(monresultat.next()){ }... int numero = monresultat.getint(1); System.out.println(numero); monresultat = pst.executequery(); 30

Exemple (3) PreparedStatement pst = maconnexion.preparestatement( "select numvoyage from tarif where datedeb >? and prix <?"); pst.setstring(1, "01-07-2017"); pst.setint(2, 1000); ResultSet monresultat = pst.executequery(); while(monresultat.next()){ }... 31

Exemple (en mise à jour) PreparedStatement pst = maconnexion.preparestatement( "update tarif set prix = prix +? where numvoyage =? and datedeb >?"); for (int i = 0; i<10; i++){//10 fois update pst.setint(2,saisievoyage()); pst.setint(1,saisiemajoration()); pst.setstring(3,saisiedate()); int compteur = pst.executeupdate(); System.out.println(compteur + " ligne(s) mise(s) à jour."); } pst.close(); Bases de données 32

PreparedStatement Création PreparedStatement nomstatement = maconnexion.preparestatement(requête) 33

PreparedStatement Gestion des paramètres Paramètrage : nomstatement.setxxx(rang, valeur) Exemples : setasciistream(), setbigdecimal(), setbinarystream(), setboolean(), setbyte(), setbytes(), setdate(), setdouble() setfloat(), setint(), setlong(), setnull(), setobject(), setshort(), setstring(), settime(), settimestamp(), setunicodestream() 34

PreparedStatement Exécution executequery() pour une requête executeupdate() pour tous les autres ordres SQL 35

Interface CallableStatement Elle permet de faire appel à une procédure ou à une fonction stockée dans la base de donnée 36

Exemple Soit la fonction définie par CREATE OR REPLACE FUNCTION entitule (numero IN voyage.numvoyage%type) RETURN voyage.nomvoyage%type IS nom voyage.nomvoyage%type BEGIN select nomvoyage into nom FROM voyage where numvoyage = numero; return nom; END; / 37

Exemple (2) Soit la fonction définie par CREATE OR REPLACE FUNCTION entitule (numero IN voyage.numvoyage%type) RETURN voyage.nomvoyage%type IS... Donc numero sera de type INTEGER et la fonction renverra du VARCHAR2(60) 38

Exemple (appel à la fonction) CallableStatement cst = maconnexion.preparecall( "{? = call entitule(?)}"); cst.setint(2,6); cst.registeroutparameter( 1,java.sql.Types.VARCHAR); boolean retour = cst.execute(); String nom = cst.getstring(1);... 39

CallableStatement Création CallableStatement nomstatement = maconnexion.preparecall(appel) Appel d une fonction {? = call nomfonction (?,?,...)} Appel d une procédure {call nomprocédure (?,?,...)} 40

CallableStatement Gestion des paramètres Paramètre d entrée nomstatement.setxxx(rang, valeur) Paramètre de sortie nomstatement.registeroutparameter(rang, valeur) nomstatement.getxxx(rang) Exemples : getbigdecimal(), getboolean(), getbytes(), getdate(), getdouble(), getfloat(), getint(), getlong(), getstring(), gettime(), gettimestamp() 41

CallableStatement Exécution nomstatement.execute() 42

Correspondances entre les types SQL et les types JAVA CHAR, VARCHAR, LONGCHAR String NUMERIC, DECIMAL java.math.bigdecimal BIT boolean TINYINT byte SMALLINT short INTEGER int BIGINT long REAL float FLOAT, DOUBLE double BINARY, VARBINARY, LONGVARBINARY byte[ ] DATE java.sql.date TIME java.sql.time TIMESTAMP java.sql.timestamp 43