Groupe 1A (socle)

Date de création : 27 mai 2004
Dernière modification :
Diffusion : Esup-Portail

Database

Présentation

But

Ce package a pour objet de faciliter les connexions aux bases de données et l'exécution des requêtes.

Services proposés

Utilisation

Déclaration des connexions d'un canal

Chaque canal déclare dans son fichier de configuration les connexions qu'il est susceptible d'utiliser, et ce de la manière suivante :

 
<pools>
	<pool *name="nom logique du pool" 
		*type="JNDI ou JDBC" 
		*url="Nom du pool tomcat si JNDI ou URL du driver JDBC"
		driverClassName="classe du driver si JDBC"
		username="nom du user pour la connexion JDBC"
		password="password pour la connexion JDBC"/>
	……
</pools> 
   
* = obligatoire
 

Il est à noter que les balises "pool" désignent soit un pool Tomcat (type=JNDI), soit une connexion JDBC simple (type=JDBC).

Ces connexions sont représentées dans le package par la classe Database.

Récupération de la liste des connexions

Pour pouvoir utiliser les connexions, on récupère sous forme de hashMap la liste des connexions définies dans le fichier de configuration du canal. Il s'agit d'une liste d'objet Database.

private HashMap connexions = Config.getInstance().getPools(); 

où Config est la classe permettant de parser le fichier de configuration.

Remarque :

Si on utilise le package avec le framework MAG, il n'est pas nécessaire de définir la méthode getPools(). Le framework fournit un comportement par défaut pour la gestion des connexions. Deux autres méthodes sont également disponibles : setPools() et getConnexionDefault().

Exécution d'une requête : objet Query

Deux façons d'instancier un objet Query :

qry = Config.getInstance().getConnexionDefault();
qry = new Query((Database) connexions.get("Apogee1")); 

Il suffit alors d'effectuer son ordre SQL de la façon suivante :

try {
	qry = new Query((Database) connexions.get("Apogee1"));
	qry.setSQL("select distinct a.g_n2_cod || '|' || a.g_n3_cod \"CODE\",…. 
			"from nw_adm_acces@NABUCOWEB a, g_nv3@NABUCOWEB n " + 
			"where a.login = ? and n.g_n1_cod = a.g_n1_cod …. ");
	// on passe les paramètres à la requête
	qry.getStmt().setString(1, login);
	// on exécute l'ordre SQL
	qry.select();
	while (qry.getRs().next()){
	   <traitement du resultset>
	}
} 
catch (SQLException e) {
	LogService.log(LogService.ERROR ,<msg d’erreur>);
}
finally {
	qry.close();
}

Il est important de noter que qry.close() ferme le statement, le resultset et la connexion si besoin est (ie si on ne travaille pas avec un pool Tomcat).

Remarques :