Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
enseignement:d14:tp:tp6 [2018/11/06 16:29] – modification externe 127.0.0.1 | enseignement:d14:tp:tp6 [2023/09/20 18:52] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== D14 - TP6 - JDBC ====== | ||
+ | <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: | ||
+ | |||
+ | Ce TP peut être fait en utilisant en particulier postgresql (installé en salle de TP) ou la base de données h2 (http:// | ||
+ | |||
+ | Il est aussi possible d' | ||
+ | |||
+ | sous linux mint en root | ||
+ | |||
+ | export http_proxy=' | ||
+ | export https_proxy=' | ||
+ | |||
+ | # Add the repository to your APT sources | ||
+ | sudo echo deb https:// | ||
+ | |||
+ | sudo apt-get update | ||
+ | sudo apt-get install -y docker.io cgroup-lite apparmor | ||
+ | |||
+ | sudo usermod -a -G docker $USER | ||
+ | |||
+ | Edit / | ||
+ | export http_proxy=' | ||
+ | |||
+ | 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:// | ||
+ | |||
+ | ===== Utilisation simple de JDBC ===== | ||
+ | - Avec le script {{: | ||
+ | - 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' | ||
+ | - Ajouter une méthode qui affiche la liste des journaux en utilisant un '' | ||
+ | - Créer une méthode '' | ||
+ | - En utilisant un '' | ||
+ | |||
+ | ===== Utilisation des métadonnées ===== | ||
+ | - Ajouter une méthode qui affiche les métadonnées correspondant à la base de données | ||
+ | - Ajouter une méthode qui afficher les métadonnées correspondant à la requête '' | ||
+ | |||
+ | ===== Batch Update ===== | ||
+ | - Utiliser les batch update pour ajouter des journaux en lisant un fichier texte formaté ('' | ||
+ | |||
+ | <code java> | ||
+ | // Création d'un requete | ||
+ | PreparedStatemen pstmt = | ||
+ | conn.prepareStatement(" | ||
+ | |||
+ | //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' | ||
+ | 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' | ||
+ | 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' | ||
+ | //et on execute toutes les mises à jour en une fois. | ||
+ | int[] count = stmt.executeBatch(); | ||
+ | |||
+ | //On valide les changements. | ||
+ | conn.commit(); | ||
+ | </ | ||
+ | |||
+ | ===== Utilisation d'un pool de connexion ===== | ||
+ | En utilisant la classe suivante, utiliser maintenant un pool de connexion au lieu d'une variable globale. | ||
+ | L' | ||
+ | |||
+ | <code java DatabaseManager.java> | ||
+ | package fr.univ_tln.bruno.mycompany.jdbc.pool; | ||
+ | |||
+ | import java.sql.Connection; | ||
+ | import java.sql.DriverManager; | ||
+ | import java.sql.SQLException; | ||
+ | import java.util.LinkedList; | ||
+ | import java.util.Queue; | ||
+ | |||
+ | /** | ||
+ | * The Class DatabaseManager. | ||
+ | */ | ||
+ | public class DatabaseManager { | ||
+ | |||
+ | /** The Constant freeConnections. */ | ||
+ | private static final Queue< | ||
+ | |||
+ | /** The Constant numberOfInitialConnections. */ | ||
+ | private static final int numberOfInitialConnections = 5; | ||
+ | |||
+ | /** The Constant password. */ | ||
+ | private static final String password = System | ||
+ | .getProperty(" | ||
+ | |||
+ | /** The Constant url. */ | ||
+ | private static final String url = System | ||
+ | .getProperty(" | ||
+ | |||
+ | /** The Constant user. */ | ||
+ | private static final String user = System | ||
+ | .getProperty(" | ||
+ | |||
+ | static { | ||
+ | for (int i = 0; i < numberOfInitialConnections; | ||
+ | try { | ||
+ | freeConnections.add(DriverManager.getConnection(url, | ||
+ | password)); | ||
+ | } catch (SQLException e) { | ||
+ | // TODO Auto-generated catch block | ||
+ | e.printStackTrace(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Gets the connection. | ||
+ | * | ||
+ | * @return the connection | ||
+ | * | ||
+ | * @throws SQLException | ||
+ | * the SQL exception | ||
+ | */ | ||
+ | public static synchronized Connection getConnection() throws SQLException { | ||
+ | Connection connection = null; | ||
+ | if (freeConnections.isEmpty()) { | ||
+ | connection = DriverManager.getConnection(url, | ||
+ | } else { | ||
+ | connection = freeConnections.remove(); | ||
+ | } | ||
+ | return connection; | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Release connection. | ||
+ | * | ||
+ | * @param connection | ||
+ | * the connection | ||
+ | */ | ||
+ | public static synchronized void releaseConnection(Connection connection) { | ||
+ | if (freeConnections.size() < numberOfInitialConnections) { | ||
+ | freeConnections.add(connection); | ||
+ | } else { | ||
+ | try { | ||
+ | connection.close(); | ||
+ | } catch (SQLException e) { | ||
+ | e.printStackTrace(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | Attention, les login et password doivent être définit pas des " | ||
+ | |||
+ | ===== Pour finir ===== | ||
+ | * Mettez en place un pool de connections avec Apache Commons DBCP : https:// | ||
+ | * 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< | ||
+ | * Créer une classe d' | ||
+ | * Ajouter des méthodes spécifiques à la DAO. | ||
+ | |||
+ | {{tag> | ||
---- struct data ---- | ---- struct data ---- | ||
+ | metadata.level | ||
+ | metadata.Type | ||
+ | metadata.Nom | ||
+ | metadata.Enseignements : D14 | ||
+ | metadata.Promotions | ||
+ | metadata.Technologies : Java, JDBC | ||
+ | metadata.Thèmes | ||
+ | metadata.Description : | ||
---- | ---- | ||