Licence profesionnelle TAI (Technologie des Applications Internet)
TD de Programmation Orientée Objet
s

Introduction au JDBC

par Philippe.Genoud@imag.fr.

Considérons le scénario suivant :

Il s'agit de suivre la consommation en café des programmeurs d'un projet. Un rapport hebdomadaire est effectué par le chef de projet qui relève chaque jour le nombre de tasses de café consommées par les différents programmeurs. Ces informations sont stockées dans un SGBD dans une table dont la structure est la suivante :

Programmeur Jour NbTasses
Gilbert Mon 1
Wally Mon 2
Edgar Tue 8
Wally Tue 2
Eugene Tue 3
Josephine Wed 2
Eugene Thu 3
Gilbert Thu 1
Clarence Fri 9
Edgar Fri 3
Josephine Fri 4

Le SGBD utilisé pour ce TP, sera Oracle installé sur le serveur hoff. Pour pouvoir dialoguer depuis vos programme Java avec la base Oracle vous aurez besoin du driver oracle.jdbc.driver.OracleDriver. Celui se trouve dans le fichier classes12.zip (1892 Ko) que vous devrez rammener sur votre compte (SANS LE "DEZIPPER" !) et intégrer dans votre classpath lors des exécutions. Ce fichier contient le bytecode des différentes classes du driver jdbc pour la base de données Oracle (équivalent d'un fichier jar).

Pour lancer une exécution depuis la ligne de commandes en supposant que le le fichier classes12.zip est dans le même répertoire que votre application AppliJDBC.java

java -cp .;classes12.zip AppliJDBC sur PC
ou
java -cp .:classes12.zip AppliJDBC sur UNIX

Pour intégrer classes12.zip dans votre "classpath" sous NetBeans, procéder comme suit :

Effectuer un clic droit sur le projet et sélectionner l'item Properties dans le menu contextuel. Ensuite dans la fenêtre Project Properties sélectionner la propriété Running Project puis ajouter au classpath d'éxécution du projet le fichier classes12.zip des classes du driver (bouton Add JAR/Folader...)

Avec l'explorateur de fichiers sélectionner le fichier classes12.zip et valider.

 


Pour vous aider à réaliser ce TP, un squelette de l'application vous est fourni dans le fichier DemoJDBC.java. Téléchargez sur votre compte ce squelette de programme et complétez le au fur et à mesure des différents exercices proposés dans ce TP.

Exercice 1 : Ouvrir une connexion, Créer et remplir une table

Compléter le squelette du programme DemoJDBC afin de réaliser les opérations précédentes :

- ouverture d'une connexion à la base Oracle
- création de la table récapitulative des consommations de café,
- initialisation de la table.
- supprimer la table

Compiler et tester votre programe. Vérifier depuis Unix (avec sqlplus) que la table a été correctement créée.

Pour effectuer ces opérations suivre les étapes suivantes :

  1. Charger le driver jdbc de la base oracle.
    Vous devez charger un driver qui "dit" aux classes JDBC comment communiquer avec la source de données.

    // pour charger la classe du driver
    Class.forName("oracle.jdbc.driver.OracleDriver");


  2. Se connecter à la source de données. En utilisant la classe DriverManager demander une connexion à une URL identifiant la base de données Oracle sur hoff.
    Connection con = DriverManager.getConnection( URL, username, password);

    l'URL pour la base Oracle sur hoff :
    jdbc:oracle:thin:@hoff.imag.fr:1521:ufrima


  3. Envoyer des instructions SQL pour créer une table.
    1. demander un objet Statement à l'objet Connection:
      Statement stmt = con.createStatement();
    2. Ensuite exécuter l'instruction SQL suivante pour créer la table nommée JoltData.

      CREATE TABLE JoltData ( 
      	Programmeur VARCHAR (32), 
      	Jour CHAR (3), 
      	NbTasses INTEGER)
      	
      Attention : le ';' utilisé dans sqlplus ne doit pas être mis à la fin des chaînes de commandes SQL qui sont transmises via les méthodes excuteQuery, excecuteUpdate ou execute de la classe Statement

    3. Après avoir créée la table insérer les valeurs appropriées:
INSERT INTO JoltData VALUES ('Gilbert', 'Mon', 1)
INSERT INTO JoltData VALUES ('Wally', 'Mon', 2)
INSERT INTO JoltData VALUES ('Edgar', 'Tue', 8)
...

Exercice 2 : Rechercher de l'information dans la base de données

Pour retrouver de l'information dans la BD, utiliser des instructions SQL SELECT au travers de la méthode JAVA Statement.executeQuery qui retourne des résultats sous la forme de lignes de données dans un objet ResultSet. Les résultats sont examinés ligne par ligne en utilisant les méthode ResultSet.next() et ResultSet.getXXX().

a) Modifier le programme DemoJDBC afin d'afficher :

  • la personne ayant consommé le nombre maximum de café en une journée et sa consommation.
  • la liste des personnes triée dans l'ordre décroissant selon leur nombre de consommations.

    En termes SQL, une manière de procéder est de trier la table selon la colonne cups suivant l'ordre décroissant.
    SELECT * FROM JoltData ORDER BY NbTasses DESC

b) Modifier le programme DemoJDBC afin de calculer et afficher le nombre total de tasses de café vendues en une semaine. (essayez de penser à une commande SQL, simplifiant au maximum cette tâche).

c) Modifier le programme DemoJDBC afin de calculer pour un programmeur donné le nombre total de tasses de café consommées.

Exercice 3 : Effectuer une requête libre et Obtenir la méta information sur les types de données du résultat

Occasionellement vous pourrez avoir besoin d'obtenir de la méta information au sujet des résultats d'une requête. Par exemple l'instruction SQL
SELECT * FROM JoltData
retournera un ResultSet avec le même nombre de colonnes et de lignes que la table, JoltData. Par contre la requête
SELECT Programmeur FROM JolData
produit une table à une seule colonne ne contenant que les noms des programmeurs.

Auusi, si vous ne savez pas quelles colonnes seront présentes dans le résultat d'une requête vous devez utiliser les méta-données au travers de la classse ResultSetMetaData.

Modifier le programme DemoJDBC afin d 'exécuter une requête libre définie par une chaîne donnée au clavier et selon la nature de la requête d'afficher les informations suivantes :

  • Si la requête produit un ResultSet
    • le nombre de colonnes de la table résultat est affiché,
    • pour chaque colonne, son nom et le type des données est affiché,
    • le contenu de la table est affiché ligne par ligne.
  • Sinon le nombre de lignes modifiées dans la table JoltData est affiché.

Exercice 4 : Charger la base depuis un fichier en utilisant un PreparedStatement

Compléter le squelette du programme DemoJDBC afin d'initialiser la table à partir des données contenues dans un fichier texte :

Les valeurs utilisées pour initialiser la table pourront être stockées dans un fichier texte (une ligne du fichier correspondant à un enregistrement dans la table, les valeurs des différentes données étant séparées par un espace). Le programme LectureFichier vous montre un exemple de code qui lit un tel fichier texte. test.data est un fichier de données permettant de le tester. Adapter ce programme pour initialiser la table. On utilisera un PreparedStatement.

Vérifier depuis Unix (avec sqlplus) que la table a été correctement créée.

sqlplus ne fonctionne pas en mode autocommit. Ce qui signifie que si vous faites des modifications à votre base depuis sqlplus, celle-ci ne seront pas visibles depuis votre programme Java, à moins que vous ne fassiez explicitement un commit.

Exercice 5 : Configuration du driver de la base de données à partir d'un fichier properties

Il est dommage de "mettre en dur" dans le programme les paramètres de configuration de la base donnée (nom du driver, url de connexion). En général, il vaut mieux isoler ces paramètres dans un fichier de configuration afin de pouvoir les modifier facilement et ne pas avoir à modifier et recompiler le code Java en cas de modification de la base de données.

Modifiez votre programme afin qu'il puisse lire les chaînes décrivant la BD dans un fichier de propriétés (voir la classe java.util.Properties)