Bases de Données / Databases

Site Web de l'équipe BD du LIP6 / LIP6 DB Web Site

Outils pour utilisateurs

Outils du site


site:enseignement:master:bdr:tmejdbc

Ceci est une ancienne révision du document !


TME JDBC : Accès à un SGBD depuis Java

Préparation

  • Liste à puce
  • lire le sujet (ou voir poly). Seulement la partie JDBC (pas JSP)
  • lire les API (choisir le package java.sql, dans le cadre en haut à gauche)
  • installer les fichiers : tar zxvf $BD_TOOL/jdbc-etu.tgz
  • ceux qui utilisent Eclipse doivent référencer le jar /Infos/bd/client10/ojdbc14.jar dans leur projet.
    • cliquer avec le bouton droit sur le nom de votre projet, puis choisir Propriétés
    • Sélectionner Java build Path, puis l'onglet Librairies
    • Bouton Add External Jars, sélectionner, depuis la racine , le fichier /Infos/bd/client10/ojdbc14.jar Ok

Séance 1

  • installer l'environnement de travail (voir le poly, étape 1 uniquement)
  • Commencer l'étape 1 du sujet: répondre aux questions a) à d) dans le fichier rapport.txt
  • Dans la question 1.1 : compléter les lignes commentaires:
  • Si nécessaire, ajuster les informations de connexion :
       String server = "db-oracle.ufr-info-p6.jussieu.fr";
       String port = "1521";
       String database = "oracle";

Question fréquente concernant la compilation java: Comment éviter les warning et erreurs du compilateur javac concernant le jeu de caractères UTF-8 ?

  • convertir les fichiers encodée en iso en des fichiers encodés en utf-8
 iconv -t utf8 -f iso8859-15 Fichier.java > tmp.java && mv tmp.java Fichier.java

Question 2 : MaxPrime2. Définir une requête ''paramétrée'' :

  • La requête est une chaîne de caractères contenant un point d'interrogation ? pour chaque paramètre
  • Exemple “select * from Joueur2 where annaiss = ? ”
  • voir l'exemple dans la documentation de l'interface PreparedStatement

Questions fréquentes concernant ~MaxPrime2:

  • Comment comparer 2 chaînes de caractères a et b ?
    • utiliser la méthode : a.equals(b)
    • l'opérateur a==b ne compare pas le contenu des chaînes de caractères mais leur identifiant d'objet.
  • Comment convertir une chaîne de caractères en un nombre entier ?
    • int n = Integer.parseInt(chaine);

Questions 3 : Requête générique

  • L'exécution du programme GeneriqueHTML doit produire ce résultat .
  • Attention lors de l'exécution de l'application, le paramètre (la requête) doit être entre guillemets “ ”

Séance 2

  • Finir la question 3
  • Question 4: Schéma d'une relation.
    • le pattern pour désigner n'importe quelle chaine de caractère en SQL est “%”
  • Question 5:
    • Ajuster l'URL d'accès à la 2eme base contenant a table Sponsor
      • String url2 = “jdbc:oracle:thin:@oracle.ufr-info-p6.jussieu.fr:1521:ora10”; (user: anonyme, password: anonyme)
  • jointure inter-bases : créer un PreparedStatement sur les Sponsors, dont le paramètre est l'attribut de jointure.
  • jointure par boucles imbriquées : attention, le ~ResultSet sur les sponsor (boucle interne) doit être de type scrollable. Voir le paramètre resultSetType de la méthode Connection.createStatement. Voir aussi le champ ResultSet.TYPE_SCROLL_INSENSITIVE.

Séance 3

  • Finir la question 5
    • jointure par tri puis fusion. Voir la méthode compareTo de la classe String. Etendre l'algorithme pour traiter le cas d'une équi-jointure entre 2 attributs non uniques (i.e. 2 clés étrangères) et un ResultSet scrollable.
    • jointure par transfert de clés (semi-jointure). Pour cela générer la table des hommes sur un serveur grâce au fichier /Vrac/jdbcBDR/createHommes.sql et la table des femmmes sur l'autre serveur grâce au fichier /Vrac/jdbcBDR/createFemmes.sql (copier les deux fichiers dans votre répertoire). On veut faire la jointure “tous les couples homme-femme de même âge”. On propose deux méthodes :
      • récupérer les âges des hommes et les mettre dans une liste liste1. Récupérer les âges des femmes qui joignent avec liste1 dans la liste liste2. Générer la liste des hommes qui joignent (ceux dont l'âge est dans liste2) triée par âge, idem pour les femmes et fusionner les deux listes.
      • (facultatif) idem pour liste1 puis récupérer les femmes (nuplet complet) qui joignent et les insérer dans une table temporaire que vous créerez. Faire la jointure en SQL entre Hommes et cette table temporaire.
      • Comparer le temps d'exécution avec le temps d'exécution d'une jointure par tri-fusion entre les deux tables Hommes et Femmes
  • (facultatif) implémenter d'autres algorithmes de jointure , tout en utilisant JDBC.

Documentation

* Algorithmes de jointure (anglais)

* si nécessaire utiliser l'option -encoding pour compiler vos programmes: javac -encoding UTF-8 Fichier.java

* Liens externes : un cours HTML (université de Nice), Java 1.5 API , …

Divers

Aller vers BDR

site/enseignement/master/bdr/tmejdbc.1455902337.txt.gz · Dernière modification: 19/02/2016 18:18 par hubert