IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Déconnexion / reconnexion


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Par défaut Déconnexion / reconnexion
    Bonjour à tous,

    Je rencontre actuellement un problème avant de le détailler plus je vous donne le message que me rend la console:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    No operations allowed after connection closed.
    Ce message apparé une foix que je me reconnecte a ma base de donnée.
    exemple: je me connecte une foix je fais ce que j'ai a faire puis j'utilise un logout pour ensuite me reconnecter ( en utilisant le même utilisateur ) et la c'est le drame :'(

    Je voudrais savoir si ce message d'erreur est deja apparue pour une ou plusieurs personnes pour qu'elles me guide vers une solution.

    Si vous voulez que je vous détaille plus mon problème n'hésiter pas a me soliciter.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    après avoir fait un Connection.close(), tu ne peux plus rien faire sur cette connexion, il faut en créer une nouvelle via le driver.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Par défaut
    C'est exactement ce que je fais.

    voici ma classe connection:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    package Reporting;
     
    import java.sql.*;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
     
    public class Connect {
     
        public static Connection connect = null;
        private JFrame Frame = Fenetrelogin.Frame;
     
        public Connect() {        
     
        String adressereportingconfigclass = myProperties.urlBDDconfig;
        String password = Fenetrelogin.password;
        String userright = Fenetrelogin.userright;
     
        try {
     
            try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        }
     
        try {
            connect = DriverManager.getConnection("jdbc:mysql:"+adressereportingconfigclass, userright, password);
            System.out.println("connection ok");    
        } catch (SQLException e1) {
            e1.printStackTrace();
            JOptionPane.showMessageDialog(Frame, "Wrong Password", "Erreur", JOptionPane.WARNING_MESSAGE);        
        }
        catch (Exception e2) {
            e2.printStackTrace();
            JOptionPane.showMessageDialog(Frame, "Wrong Password", "Erreur", JOptionPane.WARNING_MESSAGE);
        }
        }
    }
    Je fait un Connect.closes(); pour fermer ma connection mais impossible d'en réouvrir une autre en appelant de nouveau ma classe je ne comprend pas trop pourquoi.

    Je préfère preciser que je débute en java ^^

    Merci

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    c'est un très mauvais idée de tout faire en statique. En l'occurence ici, je suppose que tu a une erreur lors du new Connect(), et du coup la variable statique connect reste à l'ancienne valeur.

    Pour commencer:

    retire ce champ statique et utilise un attribut d'instance. Ca permettra à chaque instance de Connect d'avoir sa propre connexion DB. Ensuite, Evite d'aller tripatouiller ta classe Fenetre depuis Connect, au lieu de ça, passe les paramètres au constructeur de la classe Connect.

    quelque chose dans ce gout là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    package Reporting;
     
    import java.sql.*;
     
    public class Connect {
     
        public Connection connect = null;
     
        public Connect(String adressereportingconfigclass, String userright, String password) {        
        try {
     
            try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        }
     
        try {
            connect = DriverManager.getConnection("jdbc:mysql:"+adressereportingconfigclass, userright, password);
            System.out.println("connection ok");    
        } catch (SQLException e1) {
            e1.printStackTrace();
            JOptionPane.showMessageDialog(Frame, "Wrong Password", "Erreur", JOptionPane.WARNING_MESSAGE);        
        }
        catch (Exception e2) {
            e2.printStackTrace();
            JOptionPane.showMessageDialog(Frame, "Wrong Password", "Erreur", JOptionPane.WARNING_MESSAGE);
        }
        }
    }
    Et du coté appelant il y a évidement des changements:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Fenetrelogin fenetrelogin = .....;
    Connect connexionInstance = new Connect(myProperties.urlBDDconfig,fenetrelogin.userright,fenetrelogin.password);
    connexionInstance.desOperations();
    connexionInstance.encoreDesOperations();
    connexionInstance.close();
    connexionInstance=null; // plus besoin

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Par défaut
    Merci de m'aider j'avoue que je tourne en rond depuis se matin.

    Pour te répondre par rapport a mon tripatouillage de ma Frame c'est uniquement pour pouvoir afficher des messages avec la ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JOptionPane.showMessageDialog(Frame, "Wrong Password", "Erreur", JOptionPane.WARNING_MESSAGE);
    Dans l'exemple que tu m'as donnée je suis tout a fait d'accord pour le passage de paramètre mais je suis "obligé" de déclaré ma variable Frame de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private JFrame Frame = Fenetrelogin.Frame;
    Sinon mes messages d'erreur me génère un message d'erreur dans la console ( un comble ) après étant donnée que je débute il existe peut etre un moyen de passé le paramètre Frame d'une manière plus propre et si c'est le cas je suis preneur.

    Ensuite pour le Static je m'y connais pas trop trop, on m'a vaguement expliqué que je pouvais utiliser cette syntaxe pour que je puisse acceder a ma variable de n'importe quel fichier dans mon programme. Hors c'est plutot le cas je doit avoir 30 fichiers qui ne sont pas forcément dans le même package ( sa aussi on m'as pas vraiment dit comment géré la situation ) qui utilise cette même connexion. Si il existe un moyen de partager cette connexion plus facilement ou même plus efficacement je prend ^^.

    Je teste t'as méthode pour voir si cela fonctionne je te tien au courant.

    EDIT:

    Donc après test je n'est pas pu enlever le static de connect sous peine de me voir afligé 60 erreur donc j'ai juste mis en paramètre deux variable sachant que la dernière je vais la cherché depuis un fichier de configuration.

    Voili voilou pour la situation qui n'est pas facile désoler :S

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    il y des moyens plus propre pour accéder à l'instance de la connection! En l'occurence, c'est à toi de passer cette connection à toute classe en ayant besoin! Le static est un très mauvaise idée, par définition cette donnée n'est pas constante et n'a aucune raison d'être unique.

    Pour le frame tu n'en a pas besoin. Si tu n'a pas de Frame, passe null à ton JOptionPane, ca marche aussi bien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Script déconnexion et reconnexion wi-fi automatique
    Par raptack dans le forum Windows
    Réponses: 1
    Dernier message: 06/02/2015, 01h26
  2. Déconnexion réseau
    Par esa dans le forum Web & réseau
    Réponses: 3
    Dernier message: 22/06/2004, 07h55
  3. [Delphi 4] [OPC] [ActiveX] Reconnexion propre à un serveur.
    Par _Marsu_ dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 11/05/2004, 16h00
  4. [Débutant] Problème de déconnexion d'une page JSP
    Par amal9 dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 22/01/2004, 13h40
  5. Déconnexion d'une session Win2k
    Par lamasse dans le forum C++Builder
    Réponses: 3
    Dernier message: 02/10/2003, 08h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo