Grosse MàJ

This commit is contained in:
olivier
2008-11-25 22:11:16 +01:00
parent 53195fdfcd
commit 3e719157ea
2980 changed files with 343846 additions and 0 deletions

View File

@ -0,0 +1,522 @@
package com.gestionnaires;
/*
* Remarque : Type de caract<63>res utilis<69>s dans ce fichier : UTF-8
*/
//JDBC
import java.sql.*;
import java.util.Vector;
/**
* Op<4F>rations possibles avec GestionConnexion.
* @author 3fvorillion
*/
enum OperationBDD
{
/**
* op&eacute;ration de s&eacute;lection .
*/
OP_BDD_SELECTION,
/**
* op&eacute;ration de cr&eacute;ation de table.
*/
OP_BDD_CREER_TABLE,
/**
* op&eacute;ration de suppression de table.
*/
OP_BDD_SUPPR_TABLE
}
/**
* Gestionnaire d'une connexion &agrave; une base de donn&eacute;es.
* @author 3fvorillion
*/
public class GestionConnexion
{
/*
* VARIABLES
*/
// param<61>tres
private ParametresConnexion paramsConn;
// connexion
private Connection connection = null;
private Statement statement = null;
// requ<71>te SQL
private String requeteSQL = "";
private ResultSet resultSet = null;
// erreurs - anomalies
private Vector<String> vs_erreurs = null;
private Vector<String> vs_anomalies = null;
/*
* CONSTRUCTEUR
*/
/**
* Constructeur par d&eacute;faut.<br>
* Instancie le gestionnaire d'une connexion &agrave; une base de donn&eacute;es.
* @exception ClassNotFoundException La classe n'a pas &eacute;t&eacute; trouv&eacute;e
*/
public GestionConnexion()
throws ClassNotFoundException, Exception
{
/*
* Init les autres variables
*/
this.statement = null;
this.resultSet = null;
this.requeteSQL = "";
this.paramsConn = new ParametresConnexion();
//init la gestion des erreurs - anomalies
this.vs_erreurs = new Vector<String>();
this.vs_anomalies = new Vector<String>();
try
{
// R<>cup<75>ration du driver
Class.forName(ParametresConnexion.CLASSE).newInstance();
}
catch (ClassNotFoundException ex)
{
//remonte l'exception
throw new ClassNotFoundException("La classe '"+ParametresConnexion.CLASSE+"' n'a pas <20>t<EFBFBD> trouv<75>e.");
}
catch (Exception ex)
{
//remonte l'exception
throw ex;
}
}
/*
* METHODES D'INSTANCES
*/
/**
* Ouvre une connexion avec les param&egrave;tres sp&eacute;cifi&eacute;s.
* @param params Objet contenant les param&egrave;tres &agrave; appliquer pour la connexion.
*/
public void ouvrir(ParametresConnexion params)
{
//V<>rifie le param<61>tre
if (params == null)
throw new NullPointerException();
//Copie les param<61>tres
this.paramsConn.CopierDepuis(params);
//Appelle la m<>thode sans param<61>tres
this.ouvrir();
}
/**
* Ouvre une connexion avec les param&egrave;tres d&eacute;j&agrave; charg&eacute;s.<br>
* Note : si aucun param&egrave;tre n'a &eacute;t&eacute; charg&eacute;, utilise les param&egrave;tres de connexion par d&eacute;faut (cf classe ParametresConnexion).
*/
public void ouvrir()
{
try
{
// ferme la conexion pr<70>c<EFBFBD>dente
this.fermerConnexion();
// init la nouvelle connexion
this.connection = DriverManager.getConnection(this.paramsConn.Url,
this.paramsConn.Utilisateur, this.paramsConn.Pwd);
this.traiterWarning(this.connection.getWarnings());
}
catch (SQLException ex)
{
this.traiterSQLException(ex);
this.fermerConnexion();
}
}
/**
* Donne l'&eacute;tat de la connexion en cours.
* @return true si la connexion est ouverte; false si ferm&eacute;e.
*/
public boolean estOuverte()
{
boolean bOuverte = false;
try
{
if (this.connection != null)
bOuverte = !this.connection.isClosed();
}
catch (SQLException ex)
{
this.traiterSQLException(ex);
}
return bOuverte;
}
/**
* Ferme les ressources utilis&eacute;es par la requ&ecirc;te:<br>
* - ferme le ResultSet et le Statement;<br>
* - vide le contenu de la requ&ecirc;te.
*/
public void fermerRessourcesRequete()
{
try
{
// Ferme le resultSet
if (this.resultSet != null)
{
this.resultSet.close();
this.resultSet = null;
}
// Ferme le statement
if (this.statement != null)
{
this.statement.close();
this.statement = null;
}
// Vide la requ<71>te
this.requeteSQL = "";
}
catch (SQLException ex)
{
this.traiterSQLException(ex);
}
}
/**
* Ferme la connexion et lib&egrave;re les autres ressources qui ont pu &ecirc;tre utilis&eacute;es.
*/
public void fermerConnexion()
{
try
{
// Ferme le statement
this.fermerRessourcesRequete();
// Ferme la connexion
if (this.connection != null)
{
this.connection.close();
this.connection = null;
}
}
catch (SQLException ex)
{
this.traiterSQLException(ex);
}
}
/**
* Lance la requ&ecirc;te SQL de s&eacute;lection sp&eacute;cifi&eacute;e.
* @param query Requ&ecirc;te SQL de type SELECT &agrave; ex&eacute;cuter.
* @return true si la requ&ecirc;te a r&eacute;ussie; false sinon.
*/
public boolean lancerRequeteSelection(String query)
{
boolean res = true;
try
{
// verifie la connexion
if (this.connection != null)
{
// lib<69>re les ressources de la pr<70>c<EFBFBD>dente requ<71>te
this.fermerRessourcesRequete();
// prepare la requete
this.statement = this.connection.createStatement();
this.traiterWarning(this.statement.getWarnings());
// emet la requete
this.resultSet = this.statement.executeQuery(query);
this.traiterWarning(this.resultSet.getWarnings());
// si on est arriv<69> jusqu'ici, c'est qu'il n'y a pas eu de lev<65>e d'exception
// =>actualise la requ<71>te
this.requeteSQL = query;
}
}
catch (SQLException ex)
{
this.traiterSQLException(ex);
// lib<69>re les ressources utilis<69>es
this.fermerRessourcesRequete();
//annonce l'<27>chec de la requ<71>te SQL
res = false;
}
return res;
}
/**
* Lance la requ&ecirc;te SQL sp&eacute;cifi&eacute;e qui modifie la base de donn&eacute;e.
* @param query Requ&ecirc;te SQL de type DELETE, UPDATE, INSERT &agrave; ex&eacute;cuter.
* @return nombre de lignes modifi&eacute;es pour requ&ecirc;te DDL;<br>
* 0 pour requ&ecirc;te ne donnant aucun r<>eacute;sultat;<br>
* -1 si une erreur est survenue lors de l'ex<65>cution de la requ<71>te;
*/
public int lancerRequeteModifBDD(String query)
{
int res = 0;
try
{
// verifie la connexion
if (this.connection != null)
{
// lib<69>re les ressources de la pr<70>c<EFBFBD>dente requ<71>te
this.fermerRessourcesRequete();
// prepare la requete
this.statement = this.connection.createStatement();
// emet la requete
res = this.statement.executeUpdate(query);
this.traiterWarning(this.statement.getWarnings());
// si on est arriv<69> jusqu'ici, c'est qu'il n'y a pas eu de lev<65>e d'exception
// =>actualise la requ<71>te
this.requeteSQL = query;
}
}
catch (SQLException ex)
{
this.traiterSQLException(ex);
// lib<69>re les ressources utilis<69>es
this.fermerRessourcesRequete();
//annonce l'<27>chec de la requ<71>te SQL
res = -1;
}
return res;
}
/**
* Retourne une copie de l'objet contenant les param&egrave;tres de la connexion courante.
* @return Copie de l'objet contenant les param&egrave;tres de connexion.
*/
public ParametresConnexion getParametresConnexion()
{
//Retourne une copie de l'objet contenant les param<61>tres de connexion
return new ParametresConnexion(this.paramsConn);
}
/**
* Retourne la requ&ecirc;te SQL qui a &eacute;t&eacute; lanc&eacute;e avec succ&egrave;s.
* @return Requ&ecirc;te SQL qui a &eacute;t&eacute; ex&eacute;cut&eacute;e.<br>Si pas de r&eacute;sultats disponibles, renvoie une cha<68>ne vide.
*/
public String getRequeteSQL()
{
return this.requeteSQL;
}
/**
* Donne les infos sur la connexion courante.
* @return Liste des infos de la connexion en cours.
*/
public Vector<String> getInfosConnexion()
{
Vector<String> vs_infosConn = new Vector<String>();
DatabaseMetaData dmd;
try
{
// V<>rifie que la connexion soit ouverte
if (this.estOuverte())
{
// Etat de la connexion
vs_infosConn.add("Etat de la connexion : ouverte");
vs_infosConn.add("------------------------------");
// Obtient les meta-datas de la base
dmd = this.connection.getMetaData();
vs_infosConn.add("Connexion : " + dmd.getURL());
vs_infosConn.add("Driver : " + dmd.getDriverName());
vs_infosConn.add("Version : " + dmd.getDriverVersion());
}
else
{
// Etat de la connexion
vs_infosConn.add("Etat de la connexion : ferm<72>e");
vs_infosConn.add("------------------------------");
vs_infosConn.add("Connexion : " + this.paramsConn.Url);//contient le Serveur, le Port et la Base
vs_infosConn.add("Utilisateur : " + this.paramsConn.Utilisateur);
vs_infosConn.add("Mot de passe : " + this.paramsConn.Pwd.length() + " caract<63>re(s)");
}
}
catch (SQLException ex)
{
// Erreur lors de l'obtention du nom des colonnes
this.traiterSQLException(ex);
}
return vs_infosConn;
}
/**
* R&eacute;cup&egrave;re la liste des noms des colonnes issues du r&eacute;sultat de la requ&ecirc;te SQL pr&eacute;c&eacute;demment lanc&eacute;e.
* @return Liste des noms des colonnes issues du r&eacute;sultat de la requ&ecirc;te SQL.
*/
public Vector<String> getNomsColonnes()
{
Vector<String> vs_cols = new Vector<String>();
ResultSetMetaData rsmd;
try
{
// V<>rifie si la requ<71>te a d<>j&agrave; <20>t<EFBFBD> lanc<6E>e
if (this.resultSet != null)
{
rsmd = this.resultSet.getMetaData(); // obtient les meta-datas de la requ<71>te
int nbrCols = rsmd.getColumnCount();
for (int idCol = 1; idCol <= nbrCols; idCol++)
if (rsmd.isSearchable(idCol))
vs_cols.add(rsmd.getColumnName(idCol));
}
else if (this.statement == null)
// anomalie
this.vs_anomalies.add("Vous n'avez pas encore lanc<6E> la requ<71>te!!");
}
catch (SQLException ex)
{
// Erreur lors de l'obtention du nom des colonnes
this.traiterSQLException(ex);
}
return vs_cols;
}
/**
* R&eacute;cup&egrave;re le r&eacute;sultat de la requ&ecirc;te SQL pr&eacute;c&eacute;demment lanc&eacute;e dans un tableau d'objets.<br>
* Note : Ce tableau est compos&eacute; d'une liste de lignes.<br>Ces lignes sont elles-m&ecirc;mes compos&eacute;es d'une liste d'objets.
* @return Tableau d'objets correspondant au r&eacute;sultat de la requ&ecirc;te SQL.
*/
public Vector<Vector<Object>> getDataVector()
{
Vector<Vector<Object>> v_datas = new Vector<Vector<Object>>();
ResultSetMetaData rsmd;
try
{
rsmd = this.resultSet.getMetaData();
// V<>rifie qu'il y ai un r<>sultat et place le curseur au d<>but
if (rsmd.getColumnCount() > 0)
{
while (this.resultSet.next())
{
Vector<Object> vo_ligne = new Vector<Object>();
// cr<63><72> la ligne
for (int idCol = 1; idCol <= rsmd.getColumnCount(); idCol++)
vo_ligne.add(this.resultSet.getObject(idCol));
// ajoute la ligne au vecteur principal
v_datas.add(vo_ligne);
}
}
if (v_datas.isEmpty()) // anomalie
this.vs_anomalies.add("Aucune donn<6E>e trouv<75>e!!");
}
catch (SQLException ex)
{
// Probleme lors de l'obtention des donnees
this.traiterSQLException(ex);
}
return v_datas;
}
/*
* GESTION DES ERREURS - ANOMALIES
*/
/**
* Trace les erreurs SQL qui ont &eacute;t&eacute; lev&eacute;es par une exception donn&eacute;e.
* @param ex SQLException &agrave; tracer.
*/
public void traiterSQLException(SQLException ex)
{
String str_ex;
str_ex = "********* SQLException *********\n";
while (ex != null)
{
str_ex = "SQLState : " + ex.getSQLState() + "\n";
str_ex += "Message : " + ex.getMessage() + "\n";
str_ex += "------------------------------\n";
this.vs_erreurs.add(str_ex);
ex = ex.getNextException();
}
}
/**
* Trace les anomalies SQL donn&eacute;es.
* @param warn Anomalies SQL &agrave; tracer.
*/
public void traiterWarning(SQLWarning warn)
{
String str_an;
str_an = "********* SQLWarning *********\n";
while (warn != null)
{
str_an = "SQLState : " + warn.getSQLState() + "\n";
str_an += "Message : " + warn.getMessage() + "\n";
str_an += "------------------------------\n";
this.vs_anomalies.add(str_an);
warn = warn.getNextWarning();
}
}
/**
* R&eacute;cup&egrave;re la liste des erreurs trac&eacute;es.
* @return Liste des erreurs trac&eacute;es.<br>Note : retourne une copie du vecteur interne pour emp&ecirc;cher la modification directe de celui-ci.
*/
public Vector<String> getErreurs()
{
return new Vector<String>(this.vs_erreurs);
}
/**
* R&eacute;cup&egrave;re la liste des anomalies trac&eacute;es.
* @return Liste des anomalies trac&eacute;es.<br>Note : retourne une copie du vecteur interne pour emp&ecirc;cher la modification directe de celui-ci.
*/
public Vector<String> getAnomalies()
{
return new Vector<String>(this.vs_anomalies);
}
/**
* Efface la liste des erreurs trac&eacute;es.
*/
public void effaceErreurs()
{
this.vs_erreurs.clear();
}
/**
* Efface la liste des anomalies trac&eacute;es.
*/
public void effaceAnomalies()
{
this.vs_anomalies.clear();
}
}