cours0708/workspace/webapps/WEB-INF/classes/GestionConnexion.java
2008-11-25 22:11:16 +01:00

358 lines
7.0 KiB
Java
Raw Permalink Blame History

import java.sql.*;
import java.util.Vector;
enum OperationBDD
{
OP_BDD_SELECTION,
OP_BDD_CREER_TABLE,
OP_BDD_SUPPR_TABLE
}
public class GestionConnexion
{
private ParametresConnexion paramsConn;
private Connection connection = null;
private Statement statement = null;
private String requeteSQL = "";
private ResultSet resultSet = null;
private Vector<String> vs_erreurs = null;
private Vector<String> vs_anomalies = null;
public GestionConnexion()
throws ClassNotFoundException, Exception
{
this.statement = null;
this.resultSet = null;
this.requeteSQL = "";
this.paramsConn = new ParametresConnexion();
this.vs_erreurs = new Vector<String>();
this.vs_anomalies = new Vector<String>();
try
{
Class.forName(ParametresConnexion.CLASSE).newInstance();
}
catch (ClassNotFoundException ex)
{
throw ex;
}
catch (Exception ex)
{
throw ex;
}
}
public void ouvrir(ParametresConnexion params)
{
if (params == null)
throw new NullPointerException();
this.paramsConn.CopierDepuis(params);
this.ouvrir();
}
public void ouvrir()
{
try
{
this.fermerConnexion();
this.connection = DriverManager.getConnection(this.paramsConn.getUrl(),
this.paramsConn.Utilisateur, this.paramsConn.Pwd);
this.traiterWarning(this.connection.getWarnings());
}
catch (SQLException ex)
{
this.traiterSQLException(ex);
this.fermerConnexion();
}
}
public boolean estOuverte()
{
boolean bOuverte = false;
try
{
if (this.connection != null)
bOuverte = !this.connection.isClosed();
}
catch (SQLException ex)
{
this.traiterSQLException(ex);
}
return bOuverte;
}
public void fermerRessourcesRequete()
{
try
{
if (this.resultSet != null)
{
this.resultSet.close();
this.resultSet = null;
}
if (this.statement != null)
{
this.statement.close();
this.statement = null;
}
this.requeteSQL = "";
}
catch (SQLException ex)
{
this.traiterSQLException(ex);
}
}
public void fermerConnexion()
{
try
{
this.fermerRessourcesRequete();
if (this.connection != null)
{
this.connection.close();
this.connection = null;
}
}
catch (SQLException ex)
{
this.traiterSQLException(ex);
}
}
public boolean lancerRequeteSelection(String query)
{
boolean res = true;
try
{
if (this.connection != null)
{
this.fermerRessourcesRequete();
this.statement = this.connection.createStatement();
this.traiterWarning(this.statement.getWarnings());
this.resultSet = this.statement.executeQuery(query);
this.traiterWarning(this.resultSet.getWarnings());
this.requeteSQL = query;
}
}
catch (SQLException ex)
{
this.traiterSQLException(ex);
this.fermerRessourcesRequete();
res = false;
}
return res;
}
public int lancerRequeteModifBDD(String query)
{
int res = 0;
try
{
if (this.connection != null)
{
this.fermerRessourcesRequete();
this.statement = this.connection.createStatement();
res = this.statement.executeUpdate(query);
this.traiterWarning(this.statement.getWarnings());
this.requeteSQL = query;
}
}
catch (SQLException ex)
{
this.traiterSQLException(ex);
this.fermerRessourcesRequete();
res = -1;
}
return res;
}
public ParametresConnexion getParametresConnexion()
{
return new ParametresConnexion(this.paramsConn);
}
public String getRequeteSQL()
{
return this.requeteSQL;
}
public Vector<String> getInfosConnexion()
{
Vector<String> vs_infosConn = new Vector<String>();
DatabaseMetaData dmd;
try
{
if (this.estOuverte())
{
vs_infosConn.add("Etat de la connexion : ouverte");
vs_infosConn.add("------------------------------");
dmd = this.connection.getMetaData();
vs_infosConn.add("Connexion : " + dmd.getURL());
vs_infosConn.add("Driver : " + dmd.getDriverName());
vs_infosConn.add("Version : " + dmd.getDriverVersion());
}
else
{
vs_infosConn.add("Etat de la connexion : ferm<72>e");
vs_infosConn.add("------------------------------");
vs_infosConn.add("Connexion : " + this.paramsConn.getUrl());
vs_infosConn.add("Utilisateur : " + this.paramsConn.Utilisateur);
vs_infosConn.add("Mot de passe : " + this.paramsConn.Pwd.length() + " caract<63>re(s)");
}
}
catch (SQLException ex)
{
this.traiterSQLException(ex);
}
return vs_infosConn;
}
public Vector<String> getNomsColonnes()
{
Vector<String> vs_cols = new Vector<String>();
ResultSetMetaData rsmd;
try
{
if (this.resultSet != null)
{
rsmd = this.resultSet.getMetaData();
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)
this.vs_anomalies.add("Vous n'avez pas encore lanc<6E> la requ<71>te!!");
}
catch (SQLException ex)
{
this.traiterSQLException(ex);
}
return vs_cols;
}
public Vector<Vector<Object>> getDataVector()
{
Vector<Vector<Object>> v_datas = new Vector<Vector<Object>>();
ResultSetMetaData rsmd;
try
{
rsmd = this.resultSet.getMetaData();
if (rsmd.getColumnCount() > 0)
{
while (this.resultSet.next())
{
Vector<Object> vo_ligne = new Vector<Object>();
for (int idCol = 1; idCol <= rsmd.getColumnCount(); idCol++)
vo_ligne.add(this.resultSet.getObject(idCol));
v_datas.add(vo_ligne);
}
}
if (v_datas.isEmpty())
this.vs_anomalies.add("Aucune donn<6E>e trouv<75>e!!");
}
catch (SQLException ex)
{
this.traiterSQLException(ex);
}
return v_datas;
}
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();
}
}
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();
}
}
public Vector<String> getErreurs()
{
return new Vector<String>(this.vs_erreurs);
}
public Vector<String> getAnomalies()
{
return new Vector<String>(this.vs_anomalies);
}
public void effaceErreurs()
{
this.vs_erreurs.clear();
}
public void effaceAnomalies()
{
this.vs_anomalies.clear();
}
}