Base de donnée H2

publicité
JDBC
Daniel Tschirhart : Programmation Java V1.35 – 1.1
Daniel Tschirhart : Programmation Java V1.35 - 1.1
JDBC

JDBC est l'acronyme de Java DataBase
Connectivity et désigne une API définie
par Sun pour permettre un accès aux
bases de données avec Java
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Accès aux bases de donnée



Pour pouvoir utiliser JDBC, il faut un pilote
spécifique à la base de donnée à laquelle on
veut accéder.
Les pilotes se présentent généralement sous la
forme de fichiers jar dont le chemin doit être
ajouté au classpath pour permettre au
programme de l'utiliser.
JDBC permet d’utiliser quatre types de pilotes.
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Pilotes JDBC type 1

JDBC-ODBC bridge :



Fonctionne très bien sous Windows.
Disponibilité de pilotes ODBC pour la quasi totalité des
bases de données.
Inconvénients



La multiplication du nombre de couches détériore un peu les
performances.
Lors du déploiement, ODBC et son pilote doivent être
installé sur tous les postes où l'application va fonctionner.
La partie native (ODBC et son pilote) rend l'application
moins portable et dépendant d'une plateforme.
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Pilotes JDBC type 2

Pilote écrit en java appelant l'API native
de la base de données.


Ce type de pilote converti les ordres JDBC
pour appeler directement les API de la
base de donnée du pilote natif sur le client.
Ce type de driver nécessite l'utilisation de
code natif sur le client.
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Pilotes JDBC type 3

Pilote écrit en Java utilisant un intermédiaire
réseau



Ce type de pilote utilise un protocole réseau
propriétaire spécifique à la base de données.
Un serveur dédié reçoit les messages par ce
protocole et dialogue directement avec la base de
données.
Peut être facilement utilisé par une applet mais le
serveur intermédiaire doit obligatoirement être
installé sur la machine contenant le serveur web.
Fonctionne très bien sous Windows.
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Pilotes JDBC type 4

Pilote Java utilisant le protocole natif de la
base de données :


Ce type de pilote, écrit en java appelle
directement le SGBD par le réseau.
Ce type de pilote est fourni par l'éditeur de la base
de données.
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Base de donnée H2

La base de donnée H2 possède
les caractéristiques principale
suivantes.





Open source, écrite en Java.
Possède une faible empreinte mémoire.
Très rapide, supporte les standard SQL et l’API
JDBC
Mode de fonctionnement dédié (embedded) ou
serveur, gère les accès concurrents.
Peut être encryptée.
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Mode dédié




En mode dédiée, l’application ouvre la
base de donnée au sein de la même
machine Java en utilisant JDBC.
Cette méthode est la plus rapide mais
présente l’inconvénient de rendre
accessible la base uniquement au sein
d’une seule machine virtuelle.
Il n’y a pas de limites quand au nombre
de bases de données pouvant être
ouvertes simultanément.
URL d’accès :
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Mettre en place une petite
base de donnée



Lancer H2W.bat depuis le répertoire bin de H2
Choisir la configuration Generic H2 (Embedded)
Connecter-vous à la base test qui sera créé à la racine de votre compte
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Mettre en place une table et
des enregistrements

Exécuter les commandes suivantes dans la console H2.

Ces commandes construisent une table avec pour clé un entier (ID) et pour
donnée une colonne NAME, puis insère ensuite deux enregistrements :



Pour la clé 1 : ‘Hello’
Pour la clé 2 : ‘World’
Puis remplace la donnée correspondant à la clé 1 par ‘Hi’ et supprime la clé 2
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Mode client-serveur






L’application ouvre la base de donnée à
distance à l’aide de l’API JDBC ou ODBC.
Le serveur peut résider au sein de la
machine virtuelle du client, sur une autre
machine virtuelle, ou sur une autre station
Plusieurs client peuvent se connecter
simultanément à la même base de
donnée.
Mode de fonctionnement plus lent car tous
les accès se font en utilisant TCP/IP.
Il n’y a pas de limites quand au nombre de
bases de données pouvant être ouvertes
simultanément.
URL d’accès :
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Mise en place d’un serveur H2



Copier h2-xxx.jar sous h2.jar
(répertoire program files/H2/bin)
Modifier le fichier wrapper.conf situé dans le répertoire services de
H2 afin d’autoriser ou non les connexion distantes.
Aller dans le répertoire H2/service et lancer les commandes 1, 2
(Attention il faut avoir les droits administrateur).
Ces procédures comportent
quelques erreurs. Charger les
fichier modifiés depuis le serveur
de cours.
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Test de connexion au serveur à
l’aide de la console en mode local




Pré condition : le serveur est lancé
Lancer H2W.bat et choisir Generic H2 (server)
Paramétrer le nom de la base de donnée à utiliser
Vous devez retrouver la base précédemment créée.
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Test de connexion au serveur à l’aide
de la console en mode distant



Sur une autre machine connecté au même réseau, lancer la
console H2 (H2W.bat) et choisir Generic H2 (server)
Paramétrer l’adresse du serveur (adresse IP ou nom de la
machine) et le nom de la base de donnée à utiliser.
Vous devez retrouver la base précédemment créée.
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Mise en place de H2 dans
Java


Télécharger et installer la base H2 sur Internet. URL:
http://www.h2database.com
Installer H2 dans votre projet eclipse :
Importer H2xy.jar (depuis C:\Program Files\H2\bin) dans le répertoire bin de
votre projet. Tester avec le programme ci-dessous:
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Classes de l'API JDBC

Importer les classes jdbc
import java.sql.*;

Quatre classes importantes correspondant chacune à une étape
d’accès aux données
Classe
Rôle
DriverManager
Charge et configure le pilote de la base de donnée.
Connection
Réalise la connexion et l’authentification à la base de donnée.
Statement
Précise la requête SQL et la transmet à la base de donnée.
ResultSet
Permet de parcourir les enregistrement de la base de données.
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Chargement du pilote



La documentation du pilote fournit le nom de la
classe à utiliser généralement sous la forme :
jdbc.DriverXXX
Le chargeur confie l’instanciation du pilote à la
méthode static forName de la classe Class :
Class.forName("jdbc.DriverXXX");
static forName() peut lever l'exception
ClassNotFoundException.
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Exemple de chargement de
pilote H2
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Etablissement de la connexion


La connexion est établie à l’aide de la fonction statique
getConnection(String url, String user, String password)
de la classe DriverManager.
La syntaxe de l’url d’accès peut varier d'un type de
base de données à l'autre mais elle est toujours de la
forme :
protocole:sous_protocole:nom




protocole : jbdc désigne JDBC.
sous_protocole : odbc désigne ODBC.
nom doit être celui saisi dans le nom de la source ODBC.
La méthode getConnection() peut lever une exception
de la classe java.sql.SQLException.
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Exemple d’établissement de la
connexion pour une base H2
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Test de connexion au serveur
à l’aide de Java

Test du serveur en mode local
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Test de connexion au serveur
à l’aide de Java

Test du serveur en mode distant.


Remplacer la connexion par l’adresse du serveur
par exemple :
Ou le nom du serveur exemple :
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Accéder à la base de données


Une fois la connexion établie, on peut passer des ordres SQL.
Les classes pouvant être utilisées lors de l'accès à la base de
données sont les suivantes :
Classe
Rôle
DataBaseMetaData
Fourni les information sur la base : nom des tables, index, version, ...
ResultSet
Résultat d'une requête et information sur une table. L'accès se fait
enregistrement par enregistrement (ligne par ligne).
ResultSetMetaData
Information sur les colonnes (nom et type) d'un résultSet.
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Exécution des requêtes SQL


Les requêtes d'interrogation SQL sont exécutées avec les
méthodes d'un objet Statement obtenu à partir d'un objet
Connection.
Lors de l'appel à la méthode d'exécution, il est nécessaire de
lui fournir en paramètre la requête SQL sous forme de chaine.

Pour une requête de type interrogation (SELECT), la méthode à
utiliser est executeQuery().
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Exécution des requêtes SQL


Pour des traitements de mise à jour, la méthode à utiliser est
executeUpdate().
Le résultat d'une requête d'interrogation est renvoyé dans un objet de la
classe ResultSet par la méthode executeQuery().
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Classe ResultSet

Cette classe permet l'abstraction d'une table composée de
plusieurs enregistrements (lignes) dont chacun est constitué de
colonnes contenant les données.
Méthode
Rôle
getXX(XX)
XX = int ou float. Retourne le contenu de la colonne dont le numéro (entier) est
passé en paramètre. Nota les numéros démarrent à partir de 1.
getXX(String)
Retourne le contenu de la colonne dont le nom est passé en paramètre.
getDate(int)
Retourne le contenu de la colonne sous forme de date dont le numéro est passé
en paramètre.
getDate(String)
Idem mais nom de la colonne explicite.
next()
Se déplace sur le prochain enregistrement : retourne false si la fin est atteinte
close()
Détruit la table et ferme le ResultSet
getMetaData()
Retourne un objet ResultSetMetaData associé au ResultSet.
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Obtenir des informations sur la
base de données : getMetaData

La méthode getMetaData() issus d'un objet ResultSet retourne
un objet de type ResultSetMetaData. Cet objet permet de
connaître le nombre, le nom et le type des colonnes.
Méthode
Rôle
int getColumnCount()
Retourne le nombre de colonnes du ResultSet.
String getColumnName(int)
Retourne le nom de la colonne dont le numéro est fourni.
String getColumnLabel(int)
retourne le libellé de la colonne de numéro donné.
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Exemple
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Classe ResultSet Java 2
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Classe ResultSet java 2


Durant le parcours d'un ResultSet, il est possible d'effectuer des mises à jour sur la ligne
courante du curseur. Pour cela, il faut déclarer l'objet ResultSet comme acceptant les mises
à jour. .
JDBC 2.0 propose de les réaliser les mise à jour via des appels de méthodes plutôt que
d'utiliser des requêtes SQL
Daniel Tschirhart : Programmation Java V1.35 - 1.1
Exemple
Demo
Téléchargement