Cours "Modèles pour la persistance des objets"

JDBC avancé

Home (Contact)


Objectif du TP :

Donner des compléments importants sur l'utilisation de JDBC : génération automatique de clés, détachement/rattachement de données à une base de données (avec un RowSet), utilisation des JTable pour représenter les valeurs des tables relationnelles, sources de données.

Support de cours.


Génération automatique d'identificateurs non significatifs

Un employé peut participer à plusieurs projets et un projet peut englober plusieurs employés. Voici des requêtes SQL pour créer la table PROJET et la table PARTICIPATION. Ajoutez un projet dans la table PROJET en tapant directement une requête SQL (avec SQL Developer par exemple).

Écrivez en Java une méthode creerEmploye pour créer un nouvel employé dans la base de données en utilisant une séquence pour générer son matricule. Utilisez la méthode getGeneratedKeys pour récupérer le matricule généré. Appelez cette méthode dans la méthode main et enregistrez ensuite dans cette méthode main le nouvel employé dans le projet que vous avez créé dans la table PROJET.

Si vous voulez en savoir plus sur les séquences, consultez ce cours à la page 71. Oracle, DB2 et PostgreSQL utilisent les séquences pour générer les clés non signicatives. D'autres SGBD utilisent d'autres moyens ; par exemple, MySQL utilise les colonnes de type auto_increment.

Correction

Sequence.java


RowSet

Vous allez visualiser et modifier des données de la base sur les employés à l'aide d'une interface graphique.

L'interface utilisateur permet à l'utilisateur de choisir un département et de faire afficher les informations sur les employés de ce département. Les matricule, nom, salaire, date d'embauche et nom du département de chaque employé sont affichés. L'utilisateur peut modifier le salaire des employés affichés ; il ne peut pas modifier les autres informations.

L'interface graphique utilise un RowSet déconnecté pendant tout le temps de la manipulation par l'utilisateur. C'est-à-dire que pendant tout le temps de la manipulation des données par l'utilisateur, les données utilisées proviennent du rowset déconnecté, et pas directement de la base. Pour enregistrer les modifications de l'utilisateur le rowset doit être reconnecté à la base de données. Lors de cette reconnexion, le rowset enregistre uniquement les lignes modifiées par l'utilisateur. Les rowsets sont particulièrement utiles lorsque les données de la base doivent transiter entre plusieurs couches distantes ; ça n'est pas le cas ici mais, dans de nombreuses applications, l'interface utilisateur est située sur une autre machine que l'ordinateur qui héberge le SGBD.

L'enregistrement des modications dans la base à la reconnexion du rowset doivent tenir compte des éventuels conflits dus à des modifications effectuées par d'autres utilisateurs pendant la déconnexion du rowset (voir cours). S'il y a des conflits, le programme demande à l'utilisateur (par une fenêtre de dialogue) s'il veut conserver les données actuellement dans la base ou les écraser par les modifications qu'il a effectuées. Pour tester la gestion des conflits, vous modifierez en direct dans la base (par SQL Developer par exemple) certaines des lignes que vous modifiez en parallèle par l'interface graphique de l'application Java.

Les données de la base sont représentées visuellement par une JTable. Le composant graphique JTable est le composant idéal pour faire afficher des informations "tabulaires" comme le sont les informations enregistrées dans une base relationnelle. Une JTable affiche des données indiquées par un modèle de données, classe qui implémente l'interface TableModel ; par exemple, pour savoir ce qu'elle doit afficher dans une case positionnée à une certaine ligne et une certaine colonne, la table appelle la méthode getValueAt(ligne, colonne) du modèle et affiche la valeur renvoyée par cette méthode. Pour le cas de cet exercice, le modèle de données s'appuie sur les données contenues dans un rowset. Vous pouvez étudier le composant JTable dans le tutoriel de Sun (le Web comporte de nombreux autres tutoriel sur le composant JTable). Commencez par étudier le code qui vous est donné ci-dessous pour cet exercice. Remarque : pour modifier la donnée d'une JTable, l'utilisateur doit commencer par faire un double-clic dans la case de la donnée qu'il veut modifier.

Voici du code que vous devez étudier, modifier et compléter pour obtenir ce qui vous est demandé. Les parties à modifier sont indiquées par "***********". Commencez par modifier le code de la classe RowSetTableModel, le modèle de données de la JTable. La classe ConfigConnection contient une méthode pour initialiser un rowset pour la connexion à la base de données. Testez le code que vous avez modifié.

Quelques informations qui pourront vous être utiles :

Correction

Les classes


Source de données

Reprenez le premier exercice du TP 1 sur JDBC (Test1.java) en utilisant une source de données pour récupérer une connexion.

Vous utiliserez pour cela la classe oracle.jdbc.pool.OracleDataSource du driver Oracle. Pour la javadoc "officielle" vous devez avoir un compte Oracle (c'est gratuit), sinon vous la trouvez aussi sur ce site (pas nécessairement la dernière version). Vous utiliserez la méthode setURL pour donner l'URL de connexion.

Correction

Test1.java



Retour