close()
etudes.xsd
et script SQL contenant les données.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.
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:
hg pull https://forge.univ-lyon1.fr/hg/mif18-tp-base
depuis un répertoire dans le dépôt cloné pour le TP ORM
hg clone https://forge.univ-lyon1.fr/hg/mif18-tp-base
Remarque:
É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()
.
DataSource
PostgreSQL est org.postgresql.ds.PGSimpleDataSource
. Considérer les méthodes suivantes pour la configuration d'une telle DataSource (javadoc):void setServerName(String serverName)
void setDatabaseName(String databaseName)
void setUser(String user)
void setPassword(String password)
É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.
É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.
?
par une vraie valeur.PreparedStatement stat = connection.prepareStatement("SELECT toto, titi FROM bla bla ... AND nom = ? AND ..."); stat.setString(1,"Informatique"); ResultSet rs = stat.executeQuery(); while(rs.next()) { ... rs.getString("toto") ... ... rs.getInt("titi") ... } stat.setString(1,"DEVU"); rs = stat.executeQuery(); ...
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
.
ue
, une vue générant les éléments semestre
et enfin une vue générant le bulletin de chaque étudiant.
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
.
SQLFeatureNotSupportedException
) on utilisera getBinaryStream(…)
à la place de getSQLXML(…)
.getClass().getResourceAsStream("/etudes.xsd");
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.