Survol de JDBC. Master Pro SIRES Bruno MERMET

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

Java DataBaseConnectivity

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

TP Programmation Java / JDBC / Oracle

Programmation d application Bases de données avec Java

Accès aux bases de données

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

OpenPaaS Le réseau social d'entreprise

JDBC le langage Java XVI-1 JMF

Java Database Connectivity (JDBC) - Langage SQL

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 JDBC. Java DataBase Connectivity

Olivier Mondet

Dialogue avec la base de données

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)

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

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

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

I4 : Bases de Données

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

Langage SQL : créer et interroger une base

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

1. Base de données SQLite

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

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

TP3 : Creation de tables 1 seance

Compétences Business Objects

Application web de gestion de comptes en banques

Bases de données cours 1

Le Langage De Description De Données(LDD)

CREATION WEB DYNAMIQUE

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

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

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

Gestion de base de données

Création et Gestion des tables

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

Système de Gestion de Bases de Données Relationnelles. MySQL. Youssef CHAHIR

1. Langage de programmation Java

1 Position du problème

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é

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

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

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

I. MySQL : Serveur et SGBD

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

Encryptions, compression et partitionnement des données

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)

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

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

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

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

Pour les débutants. langage de définition des données

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

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

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

Stockage du fichier dans une table mysql:

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

A QUOI SERVENT LES BASES DE DONNÉES?

Bases de données relationnelles

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

Le Langage SQL version Oracle

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Les BASES de DONNEES dans WampServer

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

Tutoriel d installation de Hibernate avec Eclipse

Les bases de données

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

Java - MySQL. Code: java-mysql

Construire une base de donnée pour bibliothèque

Systèmes de Gestion de Bases de Données

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

Intégrité des données

Optimisations des SGBDR. Étude de cas : MySQL

Paradox 9. Guide de l utilisateur jpdox Web Utilities

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

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

Historisation des données

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

SQL Historique

PDO : PHP Data Object 1/13

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

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

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

PROJET 1 : BASE DE DONNÉES REPARTIES

BASES DE DONNEES TP POSTGRESQL

Logiciel de gestion de caisse et d ardoises

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

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

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

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

Introduction au Système de Gestion de Base de Données et aux Base 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

FileMaker 13. Guide de référence SQL

TP Contraintes - Triggers

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

Transcription:

Survol de JDBC Master Pro SIRES Bruno MERMET 2008-2009

Plan Principes généraux Présentation de la notion de Statement Requêtes de Consultation Requêtes de Mise à jour et requêtes du LDD Requêtes paramétrées Cas particulier : création d'une base de données Approfondissment : requêtes en mode Batch

Présentation Générale JDBC = Java DataBase Connectivity Principe général De base Un «drivermanager» (java.sql.drivermanager) Un ensemble d'interfaces EI dans : java.sql Par SGBD javax.sql Un fichier jar contenant un ensemble de classes implantant les interfaces EI, et notamment un «driver»

Se connecter à une base de données Charger le driver Class.forName(«nomDriver»); Effet : Enregistre le driver dans le drivermanager Exemple pour Mysql : Class.forName("com.mysql.jdbc.Driver"); Demander au drivermanager une connexion à la base DriverManager.getConnection(«urlBase», «login», «mdp»); Renvoie un objet implantant l'interface java.sql.connection Attention : le driver doit être accessible via le CLASSPATH (ce dernier doit en général contenir le fichier jar fourni par le SGBD) Format de urlbase: jdbc:nomsgbd://nommachine:portsgbd/base

Interagir avec une base de données Soit cnx un objet implantant java.sql.connection Statement Pour une requête standard à usage unique Exemple : Statement s = cnx.createstatement(); PreparedStatement (hérite de Statement) Pour une requête paramétrée pour plusieurs usages (la requête sera précompilée dans le SGBD) Exemple : PreparedStatement = cnx.preparestatement(requete); CallableStatement (hérite de PreparedStatement) Pour appeler des procédures stockées Non présenté dans ce rapide mémento

Fonctionnement général simplifié d'un Statement Fonctionnement général Attention : Création de l'objet Statement Utilisation du Statement pour exécuter une requête Analyse éventuelle du résultat de la requête Fermeture du Statement Toute réutilisation du Statement pour une nouvelle requête rend invalide le résultat fourni précédemment par le Statement Par défaut, un commit est effectué après toute requête 2 types principaux de requête Celles renvoyant des tuples en résultat Les autres

Requêtes de consultation Méthode utilisée Exemple Exception public ResultSet executequery(string req) ResultSet rs; Statement s = cnx.createstatement(); rs = s.executequery(«select * from clients»);... rs = s.executequery(«select nom from produits»); java.sql.sqlexception

Exploitation d'un résultat Extrait de l'api de l'interface ResultSet (toutes ces méthodes peuvent générer des SQLException) boolean next() Passe à la ligne suivante (la première lors du premier appel) Renvoie faux s'il n'y a plus de ligne String getstring(int numcol) / String getstring(string nomcol) int getint(int numcol) / double getint(string nomcol) double getdouble(int numcol) / double getdouble(string nomcol) boolean wasnull() Renvoie vrai si le dernier accès à une colonne correspondait à une valeur nulle.

Cas particulier des dates To do...

Parcours d'un ResultSet Par défaut Seul parcours possible = next() Pas de modification possible Options (paramétrables lors de la création du Statement) Déplacement avant/arrière Déplacement relatif/absolu Possibilité de modifier les tuples Existence d'une ligne spéciale pour insérer un tuple

Utilisation d'un ResultSet pour les modifications Création : Statement st = cnx.createstatement(resultset.type_scroll_insensitive, ResultSet.CONCUR_UPDATABLE); ResultSet rs = st.executequery("select nom FROM Produit"); Modification : rs.absolute(2);// on se positionne sur la deuxième ligne rs.updatestring("nom", "clous"); // on modifie le champ «nom» de la ligne courante dans le ResultSet rs.updaterow();// on valide la modification dans la base de données Ajout : rs.movetoinsertrow();// on mémorise la ligne courante puis on va à la ligne «spéciale insertion» rs.updateint(1, 10); rs.updateint(2, «clous»); rs.updateint(3, 200); // on remplit le tuple à insérer rs.insertrow(); // on insère réellement rs.movetocurrentrow(); // on revient à la ligne mémorisée

Requêtes de mise à jour Méthode utilisée Exemple Exception public int executeupdate(string req) Renvoie le nombre de lignes modifiées int res; Statement s = cnx.createstatement(); res = s.executeupdate(«insert into produits values (10,'clous',200)»); res = s.executeupdate(«delete from produits where nom='vis'»); res = s.executeupdate(«update clients set nom= 'martin' where id=10»); java.sql.sqlexception

Mises à jour : commit/rollback Par défaut Toute mise à jour est suivie d'un commit Commit manuel Supprimer les commits automatiques : cnx.setautocommit(false); Demander un commit (depuis le dernier) : cnx.commit(); Demander une annulation : cnx.rollback() (depuis le dernier commit) ; Utilisation de point de récupération : Savepoint s = cnx.setsavepoint(string nom) cnx.rollback(savepoint s)

Requêtes du LDD Utilisation de executeupdate Exemple : Statement s = cnx.createstatement(); s.executeupdate("create table eleve ( id int primary key, nom varchar(30) not null, prenom varchar(20) not null, groupe varchar(2) not null, demigroupe int, constraint foreign key (groupe) references groupe(nom))");

Requêtes paramétrées Peuvent être de mise à jour ou de consultation Principe : Exemple : Ici, on n'illustre que sur des requêtes de consultation Création d'un PreparedStatement où les paramètres sont remplacés par des «?» Avant l'exécution, faire un settype(int numpointinterrog, Type val) pour chaque «?» Exécuter la requête (executeupdate ou executequery suivant le cas) PreparedStatement ps = cnx.preparestatement(«select * from produit where id =?»); ps.setint(1, 10);// le 1 er point d'interrogation est remplacé par la valeur 10. ResultSet rs = ps.executequery();

Créer une base de données (cas MySql) Connection cnx = null; try { Class.forName("com.mysql.jdbc.Driver"); cnx = DriverManager.getConnection("jdbc:mysql://localhost:3306/", loginrootsgbd, mdprootsgbd); } catch (Exception e) { System.out.println("connexion ratée : " + e); System.exit(1); } try { Statement stm = cnx.createstatement(); stm.executeupdate("create database " + nombase"); catch (SQLException e) { System.err.println("erreur création base"); System.exit(2); } }

Requêtes en mode Batch But Utiliser un même Statement pour exécuter plusieurs requêtes d'un coup Méthodes à utiliser Gestion de la liste des requêtes void addbatch(string requête) : ajout d'une requête void clearbatch() : vide la liste des requêtes Exécution int[] executebatch() Exploitation des résultats boolean getmoreresults() ResultSet getresultset()

ExecuteBatch() Principe Exécute les différentes requêtes dans leur ordre d'ajout Retour Un tableau d'entier avec dans la i ème case (indice i-1) un entier représentant le résultat de la requête i : N >= 0 si N lignes ont été modifiées par la requête SUCCESS_NO_INFO si nb lignes modifiées inconnu Parcours des différents résultats Passage au résultat suivant : Boolean getmoreresults(): Renvoie vrai s'il s'agit d'un ResultSet (requête de sélection) Faire alors un getresultset(); Renvoie faux sinon (requête de mise à jour par exemple ou plus de résultat) Être sûr qu'il n'y a plus de résultat :!getmoreresults() && getupdatecount() == -1