OVH Cloud OVH Cloud

Erreurs stream closed et d'entrée sortie.

1 réponse
Avatar
tchou
Bonjour,

Je voulais faire une classe de Connexion globale plutot que
l'instancier =E0 chaque m=E9thode mais depuis, il plante des que je veux
modifier la base de donn=E9es : le RS ne prend pas, il reste null
(plantage au executeQuery()). J'ai beaucoup cherch=E9 et je ne comprends
pas pourquoi... Ca me bloque beaucoup parce que je ne peux rien tester
dans mes autres fenetres :

---------------------------------
Singleton de connexion
---------------------------------

public class SingleConnection{
class Connexion{
private Connection Conn =3D null;

Connexion(){
try {
Class.forName("org.postgresql.Driver");
Conn =3D DriverManager.getConnection(

"jdbc:postgresql://localhost/xxxx?user=3Dxxxx&password=3Dxxxxx");

}
catch (SQLException e) {
System.out.println("Connexion impossible =E0 PostgreSQL");
e.printStackTrace();
}
catch (ClassNotFoundException e) {
System.out.println("Classe introuvable");
e.printStackTrace();
}
}

public void close(){
try {
Conn.close();
}
catch (SQLException e){
e.printStackTrace();
}
}
public Connection getConnection(){
return Conn;
}
}
private Connexion conn =3D null;
private static SingleConnection cnxUnique;

private SingleConnection(){
conn =3D new Connexion();
}

public static SingleConnection getInstance(){
if (cnxUnique=3D=3Dnull){
cnxUnique =3D new SingleConnection();
}
return cnxUnique;
}
public Connection getConnection(){
return conn.getConnection();
}
public void close(){
conn.close();
}
}

------------------------------------------------------------------
classe Query instanci=E9e pour chaque requete
------------------------------------------------------------------
package pretack.commun;

public class Query {
private Statement Stmt =3D null;
private ResultSet RS =3D null;
SingleConnection cnx =3D SingleConnection.getInstance();

public Query(){
try {
Stmt =3D cnx.getConnection().createStatement();
}
catch (SQLException e1) {
System.out.println("Echec creation statement");
e1.printStackTrace();
}
}
public Query(String req){
try {
Stmt =3D cnx.getConnection().createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
}
catch (SQLException e1) {
System.out.println("Echec creation statement");
e1.printStackTrace();
}
try {
RS =3D Stmt.executeQuery(req);
}
catch (SQLException e) {
System.out.println("Echec de la requete ");
e.printStackTrace();
}
System.out.println(req);
}
public ResultSet getRS(){
return RS;
}
public void close(){
try {
if (RS!=3Dnull) RS.close();
Stmt.close();
}
catch (SQLException e){
System.out.println("Erreur cloture Query");
e.printStackTrace();
}
}
}
------------------------------------------------------------------
Ligne appelante
------------------------------------------------------------------
Query qUpdate =3D new Query(req);

1 réponse

Avatar
tchou
Mon binome a fini par trouvé le problème (enfin!) : le close dans le
main() qui cloturait la connection ce qui faisait que toute requete
lancé APRES se heurtait au stream closed et que les autres
fonctionnaient car executées tout au début...

Il fallait donc clore dans l'écouteur du bouton Quitter surtout pas
dans le main.