public abstract class DAO<T> {
protected Connection connect = null;
public DAO(Connection conn){
this.connect = conn;
}
public abstract boolean create(T obj);
Seulement quand je compile, je reçois un message d'erreur me disant que la connexion a été fermé et donc que l'opération d'insertion dans la base n'a pas fonctionnée.
L'origine du problème est bien le close() dans ma fonction main puisque si je le retire tout est bon, mais si on ferme une connexion normalement dans le singleton on peut récréer une instance car la connexion == null.
Premièrement je doute que la compilation te dise que la connexion est déjà close, ce ne serait pas plutôt l'exécution
Sinon ton problème peut se résoudre très facilement (j'ai donné le code hier sur ce forum) en remplaçant
if (connection == null) {
par
if (connection == null || connection.isClosed()) {
Sinon pour information cette implémentation n'est pas vraiment un Singleton (qui veut dire une seule instance) car dans le cas présent la classe n'est pas instanciée. Ce serait plutôt une classe helper. Dans le code auquel je fais mention au-dessus je donne un exemple d'implémentation de Singleton pour du mono-thread.
Sinon tu n'es pas obligé de fermer la connexion après chaque requête, à condition de t'assurer de la fermer en fin d'exécution
Bah voilà ce que je reçois dans la console du coup je pensais que c'était bien la connexion qui close. En tout cas la condition que tu as ajouté fonctionne parfaitement. Par contre du coup je ne comprend pas, si connexion est bien égal à "null" elle est forcément close non ? pourquoi rajouter un isclosed() après ?
Et pour la fermeture je ne vois pas comment fermer la connexion seulement en fin de programme à part en mettant un listener en cas de clic sur la croix rouge.
Singleton pour une connexion à une base de données
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.