Liaison avec des données

publicité
Feuille 8
Dépnt Info, I.U.T. d’Orsay
2ième année
C
lient
S
erveur
pour
novembre 2003
I
ntranet
Liaison avec des données
On dispose de la base de données BdHtml97.mdb , construite avec Access; le fichier se trouve dans
le répertoire '…/tp/FI2/csi_orientation/bases'.
I.- On crée, avec Jbuilder, une application avec interface utilisateur qui visualise une table
1.- Mise en place de la source de données ODBC
Cliquer sur Démarrer/Panneau de configuration/Outils d’administration/Sources de données ODBC.
Ajouter un DSN utilisateur AliasBase avec le pilote Microsoft Access Driver en sélectionnant la base
de données BdHtml97.mdb.
2.- Créer un nouveau projet tp_bd dans le répertoire tpcsi_bd de titre "Liaison avec les BD".
N'oubliez pas de modifier les valeurs par défaut des répertoires 'Source' et 'Sortie' prsentées
dans la boîte de dialogue de configuation 'Projet/Propriétés'.
3.- Dans ce projet, créer une application en précisant l'option suivante 'Générer les commentaires
en en-tête'. et en mettant comme nom de classe 'TestVoirTable', comme titre 'Etude de liaison
avec les BD' et comme classe 'VoirTable'.
Passer en mode conception.
4.- Création des éléments non visuels, liés à la base
Dans le cadre de l'application, créer un objet Database1 de type Database au moyen de
l'onglet Data Express.
Comment est modifiée la sous-arborescence Interface utilisateur et celle Accès aux données?
Interface Utilisateur
Accès aux données
Cliquer dans la propriété connection et remplacer 'aucun'. Pour cela, choisir le pilote
JdbcOdbcDriver et l’URL jdbc :odbc :odbcAliasBase. Avant de valider, tester la connexion. Si
Succès, OK, sinon, … trouver votre erreur.
Créer un queryDataSet queryDataSet1 à partir de l'onglet Data Express.
Dans la propriété query de queryDataSet1, associer la Database et en utilisant le constructeur
SQL, construire une requête permettant d'extraire les noms, balises et valeurs de la table
-1-
841059676
Attributs classés par ordre alphabétique et où balise = A. Tester la requête. Si succès, OK,
sinon trouver l'erreur.
5.- Création des éléments d’interface utilisateur
A jouter, en mode conception toujours, trois composants d’interface utilisateur dans la fenêtre ;
ces composants sont pris dans l’onglet ‘dbSwing’ :

Au nord, une barre de navigation (JdbNavToolBar), nom de variable : barreNavig ;

Au sud, une barre d’état (JdbStatusLabel), nom de variable : barreEtat ;

Au centre, une ‘grille’ avec barres de défilement (TableScrollPane contenant un
objet JdbTable)
Relier ces composants à la requête queryDataset1, par la propriété dataset.
Donner l'état des sous-arborescences Interface Utilisateur et Accès aux données.
Interface Utilisateur
Accès aux données
Visualiser par un dessin les connexions entre les différents éléments et récapituler les différentes
propriétés que vous avez modifiées.
D’après le source, quelles sont les méthodes utilisées pour accéder à la base et pour accéder aux
données ?
-2-
841059676
II.- On réalise une interrogation analogue sur la même base, sans interface utilisateur.
1.- Ecrire une application qui reçoit par la ligne de commande un nom de balise Html, puis interroge
la base pour afficher les attributs de cette balise et les commentaires associés. Il faudra établir la
connexion à la base en passant par Odbc, puis envoyer une requête, afficher les lignes du
résultats et fermer la connexion.
2. Ecrire une deuxième version qui place les résultats dans un fichier structuré comme un document
Html, que l'on pourra visualiser avec un navigateur.
Il est possible que, suivant le nom de balise fourni, il n'y ait aucun attribut.
Annexe1: exemple de source Java d'accès
/** AffTable.java :
Table Etudiant :
exemple d'accès à une base, par odbc
num
nom adr
100
Abel Paris
110
Adam Orsay
120
Eve Orsay
*/
import java.sql.*;
import sun.jdbc.odbc.JdbcOdbcDriver;
public class AffTable {
//
//
//
//
//
}
public static void main(String[] args) {
try {
Charger le pilote
jdbc-odbc, et se connecter
Class pil = Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection (
"jdbc:odbc:Etudiant", "U", "mdp");
Création d'un objet 'requête', et envoie
Statement req = con.createStatement();
ResultSet res = req.executeQuery
("Select * From Etudiant where nom = ’"+ args [0] + "’; ");
Afficher le résultat
int n;
while( res.next()) {
afficher les trois valeurs d'une ligne (n = 1...3)
for(n = 1 ; n <= 3; n ++)
System.out.print(res.getString(n)+'\t');
System.out.println("");
}
con.close();
Fermer la connexion
}
catch(Exception e) { e.printStackTrace(); }
}
// fin class AffTable
Annexe2: exemple de document Html
Voici document créé quand on donne 'A' comme nom de balise. Le texte souligné est extrait du
résultat de la requête.
Votre programme java doit donc créer un fichier, y écrire les lignes 1 à 6; puis extraire les
résultats de la requête pour confectionner les lignes 7 à 9, et enfin terminer par les dernières
lignes.
-3-
841059676
1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head>
<title> Attributs d'une balise </title>
</head>
<body>
<h2> Attributs de la balise 'A' </h2>
<br>name : définit la position comme une ancre
<br>href : lien hypertexte
<br>target : indique le cadre où doit s'afficher le lien
hypertexte
</body>
</html>
Annexe3: exemple de création d'un fichier
Un fichier de nom tmp, donc situé dans le
répertoire courant, est créé ci-contre; on
utilise ensuite la classe PrintStream pour
écrire dans ce fichier.
L'objet System.out est lui aussi de cette
classe; les méthodes habituellement utilisées
pour afficher à l'écran sont aussi disponibles
pour écrire dans le fichier.
Cependant, pour une opération sur fichier il
ne faut pas oublier de fermer le fichier.
-4-
import java.io.* ;
// Ouverture d'un fichier
FileOutputStream fos =
new FileOutputStream("tmp");
// Un flot de sortie sur ce fichier
PrintStream surF = new PrintStream(fos);
surF.println("Premiere ligne");
surF.print("deuxieme ligne\n");
surF.print("<br>" + 123.33);
surF.flush();
surF.close();
}
841059676
Liaison avec des données
Eléments de réponse
On dispose de la base de données BdHtml97.mdb , construite avec Access; le fichier se trouve dans
le répertoire '…/tp/FI2/csi_orientation/bases'.
I.- On veut créer une application en visualisant une partie sous Jbuilder avec interface utilisateur
1.- Mise en place de la source de données ODBC
Cliquer sur Démarrer/Panneau de configuration/Outils d’administration/Sources de données ODBC.
Ajouter un DSN utilisateur AliasBase avec le pilote Microsoft Access Driver en sélectionnant la base
de données BdHtml97.mdb.
2.- Créer un nouveau projet tp_bd dans le répertoire tpcsi_bd de titre "Liaison avec les BD".
N'oubliez pas de mettre à jour les informations Source et Sortie dans Projet/Propriétés.
3.- Dans ce projet, créer une application en précisant les options suivantes. Cliquer sur l'option
Générer les commentaires en en-tête. Mettez comme nom de classe TestVoirTable, comme titre
Etude de liaison avec les BD et comme classe VoirTable
Passer en mode conception.
4.- Création des différents éléments liés à la base
Dans le cadre de l'application, créer un objet Database1 de type Database au moyen de
l'onglet Data Express.
Comment est modifiée la sous-arborescence Interface utilisateur et celle Accès aux données?
Interface Utilisateur
Accès aux données
this
Database1
ContentPane (BorderLayout)
QueryDataSet1
BorderLayout
Cliquer dans la propriété connection et remplacer 'aucun'. Pour cela, choisir le pilote
JdbcOdbcDriver et l’URL jdbc :odbc :odbcAliasBase. Avant de valider, tester la connexion. Si
Succès, OK, sinon, … trouver votre erreur.
Créer un queryDataSet queryDataSet1 à partir de l'onglet Data Express.
Dans la propriété query de queryDataSet1, associer la Database et en utilisant le constructeur
SQL, construire une requête permettant d'extraire les noms, balises et valeurs de la table
Attributs classés par ordre alphabétique et où balise = A. Tester la requête. Si succès, OK,
sinon trouver l'erreur.
Donner l'état des sous-arborescence Interface Utilisateur et Accès aux données.
Visualiser par un dessin les connexions entre les différents éléments et récapituler les différentes
propriétés que vous avez modifiées.
-5-
841059676
Le composant Database encapsule une connexion de base de données via JDBC avec un
serveur SQL et propose également une gestion simplifiée des transactions.
Le composant QueryDataSet propose les caractéristiques permettant d’exécuter une instruction
de requêtes portant sur les tables d’une BD SQL et de stocker l’ensemble des résultats de la
requête.
II.- On veut réaliser une interrogation analogue sur la même base, sans interface utilisateur.
1.- Ecrire une application qui reçoit par la ligne de commande un nom de balise Html, puis interroge
la base pour afficher les attributs de cette balise et les commentaires associés. Il faudra établir la
connexion à la base en passant par Odbc, puis envoyer une requête, afficher les lignes du
résultats et fermer la connexion.
import java.sql.*;
import sun.jdbc.odbc.JdbcOdbcDriver;
/**
* <p>Titre : </p>
* <p>Description : </p>
* <p>Copyright : Copyright (c) 2003</p>
* <p>Société : </p>
* @author non attribuable
* @version 1.0
*/
public class Q2 {
public Q2() {
}
public static void main(String[] args) {
try {
Class pil = Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection(
"jdbc:odbc:AliasBase");
Statement req = con.createStatement();
ResultSet res = req.executeQuery(
"SELECT * FROM Attributs WHERE balise='" + args[0] + "';");
int n;
while(res.next()) {
for(n = 1 ; n <= 2; n ++)
System.out.print(res.getString(n) + "\t");
System.out.println();
}
con.close();
}
catch(Exception e) {e.printStackTrace(); }
}
}
-6-
841059676
2. Ecrire une deuxième version qui place les résultats dans un fichier structuré comme un document
Html, que l'on pourra visualiser avec un navigateur.
Il est possible que, suivant le nom de balise fourni, il n'y ait aucun attribut.
import java.sql.*;
import sun.jdbc.odbc.JdbcOdbcDriver;
import java.io.*;
/**
* <p>Titre : </p>
* <p>Description : </p>
* <p>Copyright : Copyright (c) 2003</p>
* <p>Société : </p>
* @author non attribuable
* @version 1.0
*/
public class Q3 {
public Q3() {
}
public static void main(String[] args) {
try {
Class pil=Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection(
"jdbc:odbc:AliasBase");
Statement req = con.createStatement();
ResultSet res = req.executeQuery(
"SELECT * FROM Attributs WHERE balise = '" + args[0] + "';");
int n;
// Fichier de sortie
FileOutputStream fics = new FileOutputStream("page.html");
PrintStream page = new PrintStream(fics);
page.println("<html> <head>\n");
page.println("<title>Attributs d'une balise </title>\n");
page.println("</head> <body>\n");
page.println
("<h2>Attributs de la balise " + args[0] + "</h2>\n");
while(res.next()) {
page.println("<br>" + res.getString(1)+ " : ");
page.println(" " + res.getString(4));
System.out.println();
}
con.close();
page.println("</body></html>\n");
}
catch(Exception e) {e.printStackTrace(); }
}
}
-7-
841059676
Téléchargement