1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
|
package miage.sgbd;
import java.io.File;
import java.sql.*;
import entagged.tageditor.resources.PreferencesManager;
/**
* La classe grant les fonctions lmentaires pour la gestion d'une BD
* @author Nicolas Velin ; Clment Fourel
*/
public class Connexion {
public static final boolean DEBUG = false; // Permet d'afficher les exceptions lors des updates
private Connection connexion;
/** L'instance statique */
private static Connexion instance;
/**
* Constructeur redfini comme tant priv pour interdire
* son appel et forcer passer par la mthode getInstance()
*/
private Connexion() {
initConnexion();
}
/**
* Rcupre l'instance unique de la class Singleton.
* Remarque : le constructeur est rendu inaccessible
* @return la connexion cre
*/
public static Connexion getInstance() {
if(instance == null) // Premier appel
instance = new Connexion();
return instance;
}
/**
* Initialise la connexion
* Par exemple : C:\Documents and Settings\NSV\.entagged\database
*/
private void initConnexion() {
try {
String dbName = "database";
String login = "sa";
String pwd = "";
String url = PreferencesManager.USER_PROPERTIES_DIR + "" + File.separatorChar + "" +dbName;
Class.forName("org.hsqldb.jdbcDriver").newInstance();
connexion = DriverManager.getConnection("jdbc:hsqldb:file:" + url + "; shutdown=true", login, pwd);
}
catch (Exception e) {
if(DEBUG)
e.printStackTrace();
}
}
/**
* Envoi une requete du type SELECT
* @param requete une chaine de caractre reprsentant la requete SQL
* @return ResulSet reprsentant le rsultat de la requte
*/
protected ResultSet executeQuery(String requete) {
Statement statement;
ResultSet resultat = null;
try {
statement = connexion.createStatement();
resultat = statement.executeQuery(requete);
statement.close();
}
catch (SQLException e) {
if(DEBUG)
e.printStackTrace();
}
return resultat;
}
/**
* Retourne l'entier contenu dans un resulset
* @param resultset le resultat d'une requete ne contenant qu'un seul lment
* @return l'lment unique
*/
protected static int resultsetUnEntier(ResultSet rset) {
int id = -1;
try {
if(rset.next())
id = rset.getInt(1);
rset.close();
}
catch(SQLException e) {
if(DEBUG)
e.printStackTrace();
}
return id;
}
/**
* Retourne la chaine contenu dans un resulset
* @param resultset le resultat d'une requete ne contenant qu'un seul lment
* @return l'lment unique
*/
protected static String resultsetUneChaine(ResultSet rset) {
String ch = "";
try {
if(rset.next())
ch = rset.getString(1);
rset.close();
}
catch(SQLException e) {
if(DEBUG)
e.printStackTrace();
}
return ch;
}
/**
* Rcupre le dernier ID cr
* @return
*/
private int getID() {
ResultSet resultat = executeQuery("CALL IDENTITY()");
return resultsetUnEntier(resultat);
}
/**
* Envoi une requete du type CREATE, UPDATE, DELETE, INSERT
* @param requete une chaine de caractre reprsentant la requete SQL
* @return Nombre de valeurs affectes par la mise jour
*
*/
protected int executeUpdate(String requete) {
Statement statement;
int nbVal = -1;
try {
statement = connexion.createStatement();
nbVal = statement.executeUpdate(requete);
if(requete.startsWith("INSERT"))
nbVal = getID();
statement.close();
}
catch (SQLException e) {
if(DEBUG)
e.printStackTrace();
}
return nbVal;
}
/**
* Ferme proprement la connexion en arretant la BD
* Elle termine l'objet Connection et le supprime
*/
public void shutdown() {
Statement statement;
try {
statement = connexion.createStatement();
statement.executeQuery("SHUTDOWN");
statement.close();
connexion.close();
}
catch (SQLException e) {
if(DEBUG)
e.printStackTrace();
}
}
}
|