1
APIs au-dessus de JDBC
Université de Nice - Sophia Antipolis
Richard Grin
Version 0.3 – 3/9/06
R. Grin JDBC page 2
Problèmes avec JDBC
JDBC ne contrôle pas les ordres SQL passés au
SGBD
Une faute de frappe dans le nom d’une table ou
une faute de syntaxe dans un ordre SQL ne
seront donc repérées qu’à l’exécution
R. Grin JDBC page 3
Problèmes avec JDBC
La correspondance entre les classes Java et les
tables relationnelles est un travail de bas niveau
Le programmeur doit faire attention à des détails
et écrire de nombreuses lignes pour travailler
avec les données de la base
Pourtant une grande partie de ce travail répétitif
peut être automatisé
R. Grin JDBC page 4
Autres API
D’autres API ont été construites au-dessus de
JDBC pour corriger les problèmes de JDBC :
nSQLJ
nJDO
noutils de mapping
net bien d’autres…
R. Grin JDBC page 5
SQLJ
R. Grin JDBC page 6
SQLJ
SQLJ est un standard promu par un consortium
d’éditeurs de SGBD (Oracle, IBM et Sun en
particulier) composé de 3 parties
La partie 0 de SQLJ fait partie de SQL3
Cette partie définit des extensions de SQL pour
permettre d’insérer directement des ordres SQL
au milieu d’un programme Java
Par exemple, une variable Java peut recevoir une
valeur retournée par une requête SQL
2
R. Grin JDBC page 7
import sqlj.runtime.ref.*;
import java.sql.*;
. . .
String nom;
int matricule = 1500;
#sql { select NOME into :nom from EMP
where MATRICULE = :matricule};
System.out.println("Nom : " + nom);
Exemple de code avec SQLJ
R. Grin JDBC page 8
Précompilateur SQLJ
Un précompilateur transforme les ordres SQL en
instructions Java contenant des appels de
méthodes JDBC
Le résultat est un programme source Java que
l’on peut compiler avec un compilateur Java
ordinaire
Ce précompilateur contrôle la validité des ordres
SQL ; il en faut donc un par SGBD cible
R. Grin JDBC page 9
Principe de SQLJ
Fichier source
.sqlj Précompilateur
SQLJ Fichier source
.java
Fichier de
ressources Compilateur
Java Fichier
.class
Ce procédé est déjà utilisé pour de nombreux
langages (C, Cobol, Ada,…) pour insérer des
instructions SQL
R. Grin JDBC page 10
Avantages de SQLJ sur JDBC
Code SQL bien séparé du code Java
Moins de lignes de code
Code plus lisible
Plus de portabilité
Code plus orienté objet
Syntaxe des instructions SQL et cohérence avec la
structure de la base vérifiées pendant la
précompilation, et pas à l’exécution (par exemple,
existence et type des colonnes)
R. Grin JDBC page 11
Avantages de JDBC sur SQLJ
JDBC permet de créer dynamiquement un ordre
SQL (en manipulant des chaînes de caractères)
Avec SQLJ, on doit connaître l'ordre SQL au
moment où on écrit le code
Compilation plus lourde en SQLJ (mais la tâche est
facilitée par des utilitaires de type make ou Ant)
R. Grin JDBC page 12
JDO
3
R. Grin JDBC page 13
JDO
JDO est un projet plus ambitieux que SQLJ
puisqu’il souhaite rendre en grande partie
transparente la persistance des objets Java
Le code Java écrit par les développeurs ne
s’occupe pas de la persistance
JDO nécessite une infrastructure complexe, à la
compilation, et durant l’exécution, fournie par une
implémentation JDO
R. Grin JDBC page 14
Transparence de la persistance
Les classes qui pourront avoir des instances
persistantes sont dites « capables de
persistantes »
Le principe de base de JDO est que le
programmeur n’écrit aucun code pour gérer la
persistance
Le code source d’une classe est exactement le
même, que la classe soit capable de persistance
ou non
R. Grin JDBC page 15
Rendre une instance persistante
Pour rendre une instance persistante, il suffit
d’utiliser la méthode makePersistent (voir code
plus loin)
En fait la plupart des instances sont rendues
persistantes automatiquement, « par référence »
(by reachability) :
si on rend persistant une instance de Employe,
dont la classe possède un champ capable de
persistance de type Adresse, son adresse
devient automatiquement persistante
R. Grin JDBC page 16
Portabilité
La persistance peut s’effectuer sur un support
logique quelconque : SGBD relationnel ou objet, ou
même fichiers ordinaires
Il suffit d’avoir une implémentation JDO (qui joue le rôle
d’un driver JDBC) adaptée à ce support
La persistance ne tient compte que de la description
logique des classes persistantes (méta-données),
fournie par un fichier XML écrit par le développeur
Il est ainsi très facile de changer de support
R. Grin JDBC page 17
Enrichissement JDO
Les classes capables de persistance sont
indiquées dans un fichier XML de configuration
Elles doivent être « enrichies » par un programme
spécial, fourni par l'implémentation de JDO et
adapté à un SGBD cible
Cet enrichissement ajoute les méthodes qui
permettront à l’implémentation JDO de gérer la
persistance des instances pendant l’exécution
R. Grin JDBC page 18
Exemple de code avec JDO
Ce code va ajouter une adresse dans une base de
donnée
La classe Adresse n’est pas donnée car elle est
semblable à une classe Java normale
Le schéma de la base doit comporter une table
dont la structure correspond aux champs
persistants de la classe Adresse
4
R. Grin JDBC page 19
Outils JDO
Les implémentations JDO fournissent des outils (pas
obligatoires) pour
ncréer automatiquement des schémas de base de
données compatibles avec les classes
persistantes,
nou inversement, pour créer des classes
compatibles avec des tables existantes
R. Grin JDBC page 20
Fichier des méta-données
<?xml version="1.0"?>
<!DOCTYPE jdo SYSTEM "jdo.dtd">
<jdo>
<package name="fr.truc.projet1">
<class name="Adresse">
<field name="rue"/>
<field name="ville"/>
<field name="codePostal"/>
</class>
</package>
</jdo>
R. Grin JDBC page 21
Récupérer un
gestionnaire de persistance
// Crée fabrique de gestionnaire de persistance
PersistenceManagerFactory pmf =
JDOHelper.getPersistenceManagerFactory(
jdoProperties);
pmf.setConnectionURL(DBURL);
pmf.setConnectionDriverName(DBDRIVER);
// Retrouve le gestionnaire de persistance
PersistenceManager pm =
pmf.getPersistenceManager();
R. Grin JDBC page 22
Exemple (suite)
// Démarrer une transaction
Transaction t = pm.currentTransaction();
t.begin();
// Crée une nouvelle Adresse
Adresse adresse = new Adresse("58 rue Victor Hugo",
"Nice", "06100");
//... et la rend persistante
pm.makePersistent(adresse);
// adresse automatiquement enregistrée dans la
// base au commit !
t.commit();
// Fermeture du gestionnaire de persistance
pm.close();
R. Grin JDBC page 23
Outils de mapping
Ils automatisent la correspondance entre les
données correspondant à l’état des objets et les
données enregistrées dans les bases de données
relationnelles
Standardisé avec JPA
Ils sont étudiés dans une autre partie du cours
(mapping objet-relationnel et JPA)
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !