Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
enseignement:d14:tp:tp6 [2014/01/28 10:31] – modification externe 127.0.0.1enseignement:d14:tp:tp6 [2023/09/20 18:52] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
-====== TP6 - JDBC ======+====== D14 - TP6 - JDBC ======
  
-<note important>Attention, java utilise par défaut IPV6 et cela pose des problèmes pour l'authentification. pour utiliser IPV4, ajouter la propriété ''-Djava.net.preferIPv4Stack=true'' lors de l'éxecution dans Run>Run configurations>Arguments</note>+<WRAP center round alert 60%> 
 +Attention, Java utilise par défaut IPV6 et cela pose des problèmes en TP pour forcer IPV4 suivre les instructions suivantes : [[java:ipv6]]</WRAP>
  
-Pour éditer la base de données vous pouvez utiliser pgadmin3 ou installer http://sqldeveloper.solyp.com/+Ce TP peut être fait en utilisant en particulier postgresql (installé en salle de TP) ou la base de données h2 (http://www.h2database.com/html/cheatSheet.html) que vous ferez fonctionner en serveur.
  
-===== Utilisation simple de JDBC =====+Il est aussi possible d'utiliser très simplement un serveur mysql (ou postgresql) avec [[https://www.docker.com/|Docker]] :
  
-  En utilisant pgadmin3 ou la ligne de commande et le script {{:enseignement:m1:inf2:journal.zip|journal.zip}} créer les tables qui représentent des journaux. +sous linux mint en root 
-  - Créer une classe que se connecte à votre base de donnée postgresql. Pensez à mettre en place correctement les librairies nécessaires. Pour le moment, la connection sera représentée par une variable d'instance. + 
-  - Ajouter une méthode qui affiche la liste des journaux en utilisant un Statment +export http_proxy='http://user:password@proxy-host:proxy-port' 
-  - Créer une fonction ajouterJournal(...) qui permet d'insérer un journal dans la base de données +export https_proxy='http://user:password@proxy-host:proxy-port' 
-  - En utilisant un PreparedStamement, lire un code de Journal au clavier et afficher les informations correspondantes tant que l'on ne rentre pas 0.+ 
 +# Add the repository to your APT sources 
 +sudo echo deb https://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.list 
 + 
 +sudo apt-get update 
 +sudo apt-get install -y docker.io cgroup-lite apparmor 
 + 
 +sudo usermod -a -G docker $USER 
 + 
 +Edit /etc/defaults/docker and add the following lines: 
 +export http_proxy='http://user:password@proxy-host:proxy-port' 
 + 
 +service docker restart 
 + 
 +  docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=ArraujUrb4 -d mysql 
 + 
 +Pour éditer la base de données vous pouvez utiliser pgadmin3, installer http://sqldeveloper.solyp.com/ ou utiliser directement Intellij Idea (http://www.jetbrains.com/idea/webhelp/configuring-a-db-data-source.html). 
 + 
 +===== Utilisation simple de JDBC ===== 
 +  - Avec le script {{:enseignement:d14:tp:journal.sql.tgz|}} créer les tables qui représentent des journaux. 
 +  - Créer une classe que se connecte à votre base de donnée. Pensez à mettre en place correctement les librairies nécessaires. Pour le moment, la connexion sera représentée par une variable d'instance. 
 +  - Ajouter une méthode qui affiche la liste des journaux en utilisant un ''Statment'' 
 +  - Créer une méthode ''ajouterJournal(...)'' qui permet d'insérer un journal dans la base de données 
 +  - En utilisant un ''PreparedStamement'', lire un code de Journal au clavier et afficher les informations correspondantes tant que l'on ne rentre pas 0.
  
 ===== Utilisation des métadonnées ===== ===== Utilisation des métadonnées =====
Ligne 19: Ligne 43:
 ===== Batch Update ===== ===== Batch Update =====
   - Utiliser les batch update pour ajouter des journaux en lisant un fichier texte formaté (''code_j:titre:prix:type:periode::adr_j'').   - Utiliser les batch update pour ajouter des journaux en lisant un fichier texte formaté (''code_j:titre:prix:type:periode::adr_j'').
 +
 +<code java>
 +// Création d'un requete
 +PreparedStatemen pstmt = 
 +  conn.prepareStatement("INSERT INTO EMPLOYE (email, nom, prenom) VALUES(?, ?, ?)");
 +
 +//On ajoute les exécution une à une ...
 +conn.setAutoCommit(false);
 +
 +// On fixe les paramètres de la première requête à exécuter
 +pstmt.setString( 1, "...@...");
 +pstmt.setString( 2, "..." );
 +pstmt.setString( 3, "..." );
 +// Et on l'ajoute au batch
 +pstmt.addBatch();
 +
 +// On fixe les paramètres de la seconde requête à exécuter
 +pstmt.setString( 1, "...@...");
 +pstmt.setString( 2, "..." );
 +pstmt.setString( 3, "..." );
 +// Et on l'ajoute au batch
 +pstmt.addBatch();
 +
 +// On ajoute autant de requêtes que nécessaire
 +//Par exemple en lisant un flux de données.
 +.
 +.
 +.
 +.
 +//On créée un tableau d'entiers pour recevoir les résultats.
 +//et on execute toutes les mises à jour en une fois.
 +int[] count = stmt.executeBatch();
 +
 +//On valide les changements.
 +conn.commit();
 +</code>
  
 ===== Utilisation d'un pool de connexion ===== ===== Utilisation d'un pool de connexion =====
 En utilisant la classe suivante, utiliser maintenant un pool de connexion au lieu d'une variable globale. En utilisant la classe suivante, utiliser maintenant un pool de connexion au lieu d'une variable globale.
 +L'objet de cet exercice est de comprendre le fonctionnement jdbc propose maintenant ce mécanisme (http://docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html).
  
 <code java DatabaseManager.java> <code java DatabaseManager.java>
Ligne 110: Ligne 170:
  
 ===== Pour finir ===== ===== Pour finir =====
-  - Créer une interface ''Entity'' qui impose les méthodes ''create'', ''remove'', et ''merge'' +  * Mettez en place un pool de connections avec Apache Commons DBCP : https://www.baeldung.com/java-connection-pooling 
-  Créer une classe qui spécialise la classe Chien en implante l'interface précédente et qui permet de  +  Créer une interface générique paramétrée par le type qui sera celui de votre entité (Personne, Chien...) cette interface proposera par exemple les methodes : T find(long id), List<TfindAll(), persist(T), update(T), remove(T)Vous pourrez ensuite améliorer cette interface
-    - Créer une instance de Chien +  * Créer une classe d'entité Personne, une classe DAOPersonne qui implante DAO<Personne>
-    - D'invoquer ''create'' pour ajouter ce Chien dans la base de données +  * Ajouter des méthodes spécifiques à la DAO.
-    - De modifier l'instance de Chien en mémoire (éventuellement plusieurs fois) +
-    - De faire une mise à jour dans la base de données avec ''merge''  +
-    - Et finalement de supprimer le Chien avec remove. +
-  - Implanter des méthodes qui permettent de retrouver et d'instancier un ou des Chiens : +
-    - Chien findById(...) +
-    - List<ChienfindByName(...), ..+
-  - En vous inspirant de cet exemple http://onjava.com/pub/a/onjava/excerpt/swinghks_hack24/index.htmlcréer une JTable qui permet d'afficher les Chiens contenus dans la base de données.+
  
 {{tag>D14 TP Java JDBC}} {{tag>D14 TP Java JDBC}}
 ---- struct data ---- ---- struct data ----
 +metadata.level       : 
 +metadata.Type        : TP
 +metadata.Nom         : 
 +metadata.Enseignements : D14
 +metadata.Promotions 
 +metadata.Technologies : Java, JDBC
 +metadata.Thèmes     : Base de données
 +metadata.Description : 
 ---- ----