Table des matières

TP JDBC, XML et TrAX

Mises à jour

Remarques préalables

Introduction

L'objectif de ce TP est de pratiquer trois APIs:

Pour ce TP, on utilisera une base PostgreSQL et le schéma du TP ORM. On pourra utiliser le script fourni ci-dessous pour ajouter des données dans la base.

Quelques liens

Mise en place

Script SQL pour ajouter quelques données, il est également possible d'en ajouter en utilisant le TP ORM.

Le dépôt utilisé pour le tp précédent contient un nouveau projet maven: tpxml. Vous pouvez le récupérer:

Travail demandé

Remarque:

Connexion JDBC

Écrire une classe bdav.jdbc.FournisseurConnexion ayant une méthode java.sql.Connection createConnection() renvoyant une connection JDBC à la base PostgreSQL. Écrire un test bdav.jdbc.JDBCTest qui teste cette méthode, puis ferme la connection1). La méthode de test, testConnexion() devra être vide. On mettra le code de connexion dans setUp() et la fermeture de la connexion dans tearDown().

Requête simple

Écrire un test void testRequeteSimple() dans JDBCTest qui utilise une connexion fournie par FournisseurConnexion pour exécuter une requête renvoyant le nombre de département et qui teste la valeur du résultat.

Requête paramétrée

Écrire un test void testRequeteParametree() dans JDBCTest avec la requête précédente à laquelle on ajoute:

WHERE nom = ?

Au lieu d'utiliser un Statement, on utilisera un PreparedStatement. Le test exécutera deux fois requête avec des valeurs différentes pour le paramètre, mais sans créer de nouveau PreparedStatement entre les deux requêtes.

Génération de XML par PostgreSQL

Ouvrir et comprendre le schéma XML tpxml/src/main/resources/etudes.xsd. Consulter le TP SQL/XML, ainsi que la documentation sur les fonctions XML de PostgreSQL. Mettre au point une requête SQL construisant le bulletin d'un(e) étudiant(e) particulier(ère). Une fois au point, le code SQL de la requête et des éventuelles vues crées sont à placer dans le fichier tpxml/src/main/resources/etudes.sql.

Validation du XML produit

Consulter la documentation des classes javax.xml.validation.SchemaFactory, Schema et Validator. Consulter également la documentation de la classe java.sql.SQLXML. Créer une classe (pas un test) bdav.xml.XMLReports, ayant un champ de type java.sql.Connection pour exécuter des requêtes, ainsi qu'une méthode protected javax.xml.transform.Source getBulletin(long numEtudiant) récupérant le bulletin de l'étudiant au format XML. Ecrire un test bdav.xml.XMLReportsTest qui vérifie que le résultat renvoyé par getBulletin3) est conforme au schéma tpxml/src/main/resources/etudes.xsd.

Application

Créer une feuille de style tpxml/src/main/resources/etudes-html.xsl permettant de faire une présentation xhtml d'un bulletin. Changer le code de la méthode main de la classe App pour que le programme affiche sur la sortie standard la version html du bulletin de l'étudiant dont on passe le numéro comme premier argument de la ligne de commande.

1)
méthode close()
2)
i.e. il ne doit pas y avoir une clause WHERE etudiant = 123456123, mais l'attribut etudiant doit apparaitre dans le résultat des vues. Il faut bien sur garder les égalité nécessaires au jointures dans le WHERE
3)
pour un étudiant particulier