Ceci est une ancienne révision du document !


D14 - TP6 - JDBC

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

Pour éditer la base de données vous pouvez utiliser pgadmin3 ou installer http://sqldeveloper.solyp.com/

  1. En utilisant pgadmin3 ou la ligne de commande et le script journal.zip créer les tables qui représentent des journaux.
  2. 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.
  3. Ajouter une méthode qui affiche la liste des journaux en utilisant un Statment
  4. Créer une fonction ajouterJournal(…) qui permet d’insérer un journal dans la base de données
  5. En utilisant un PreparedStamement, lire un code de Journal au clavier et afficher les informations correspondantes tant que l’on ne rentre pas 0.
  1. Ajouter une méthode qui affiche les métadonnées correspondant à la base de données
  2. Ajouter une méthode qui afficher les métadonnées correspondant à la requête select * from journal
  1. Utiliser les batch update pour ajouter des journaux en lisant un fichier texte formaté (code_j:titre:prix:type:periode::adr_j).

En utilisant la classe suivante, utiliser maintenant un pool de connexion au lieu d’une variable globale.

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<Connection> freeConnections = new LinkedList<Connection>();
 
	/** The Constant numberOfInitialConnections. */
	private static final int numberOfInitialConnections = 5;
 
	/** The Constant password. */
	private static final String password = System
			.getProperty("MyCompany.database.password");
 
	/** The Constant url. */
	private static final String url = System
			.getProperty("MyCompany.database.url");
 
	/** The Constant user. */
	private static final String user = System
			.getProperty("MyCompany.database.user");
 
	static {
		for (int i = 0; i < numberOfInitialConnections; i++) {
			try {
				freeConnections.add(DriverManager.getConnection(url, user,
						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, user, password);
		} 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 “properties” (cf System.setProperty()). Ensuite, ils pourront être lus dans un fichier de configuration.

  1. Créer une interface Entity qui impose les méthodes create, remove, et merge
  2. Créer une classe qui spécialise la classe Chien en implante l’interface précédente et qui permet de
    1. Créer une instance de Chien
    2. D’invoquer create pour ajouter ce Chien dans la base de données
    3. De modifier l’instance de Chien en mémoire (éventuellement plusieurs fois)
    4. De faire une mise à jour dans la base de données avec merge
    5. Et finalement de supprimer le Chien avec remove.
  3. Implanter des méthodes qui permettent de retrouver et d’instancier un ou des Chiens :
    1. Chien findById(…)
    2. List<Chien> findByName(…), …
  4. En vous inspirant de cet exemple http://onjava.com/pub/a/onjava/excerpt/swinghks_hack24/index.html, créer une JTable qui permet d’afficher les Chiens contenus dans la base de données.