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 :

pb connection java easyPhp


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
    Octobre 2004
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 188
    Par défaut pb connection java easyPhp
    Bonjour,
    Je réalise une application Java communiquant avec une bdd sous easyPhp.
    Je me connecte sans pb, mais, au bout d'un certain nombre de requete exécutées, le pg plante et le compilateur me met :

    java.sql.SQLException: Data source rejected establishment of connection, message from server: "Trop de connections"
    java.sql.SQLException: No operations allowed after statement closed.
    A chaque fois que j'effectue une requete, je créé un nouveau statement et un resultset. Je ferme ses 2 variables à la fin de chaque requete.
    Savez vous pourquoi, au bout d'un certain temps, j'ai cette erreur?

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Par défaut
    A priori, je suppose que tu dois créer une connexion a chaque fois que tu fais une requete, mais tu ne dois pas la fermer a la fin, du coup, lors du lancement de ton programme, tu dois te retrouver, si tu lances 100 requetes de maniere sequentielle, avec une connexion utile, et 99 presentes, mais qui ne servent a rien...

    Au choix, si tu fais vraiment du sequentiel, crée une connexion, un statement, et un resultset, et fais toutes tes requetes dessus.

    Si tu as par contre plusieurs acces possibles simultanément, si tu risques d'avoir beaucoup de connexions simultanément, tu peux lancer une connexion a chaque fois que tu lances une requete, et la fermer des que tu as fini de recupérer tes resultats...

    Ca rallonge un peu le traitement, mais ca limite le temps d'utilisation d'une connexion, donc ca diminue les chances d'avoir trop de connexions simultanément.

    Si tu as une appli client serveur, avec beaucoup de connexions BD possibles, le mieux est que les connexions BD soient lancées par le serveur. (limite, si tu utilises une servlet, tu peux avoir une seule connexion pour tout le monde, et eviter les accès concurents via un synchronized...)

    Si je n'ai pas repondu a ta question, detaille un peu plus le mode de fonctionnement de ton appli...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 188
    Par défaut
    En fait, ce qui est bizarre; c'est que pour chaque requete que je fais, je ferme la connection à la fin. C'est pour ca que je ne comprends pas tres bien. Voici un exemple de code : Dans une classe, j'ai une méthode connection avec des variables globales conn et stmt.
    Ensuite, avant d'effectuer une requete, j'appelle la méthode connection, créé un resultSet, et ferme ensuite le resultset et la connection. Ca te parrait correct?
    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
     public void connection(){
        try{
     
          // Charge le pilote pour de la base
          Class.forName("com.mysql.jdbc.Driver");
          conn = DriverManager.getConnection(
              "jdbc:mysql://localhost/gestion parc info", "root", "");
          // Crée un objet pour envoyer des requêtes à travers la connection
          stmt = conn.createStatement();
         } catch(Exception e){System.out.println("" + e);}
     }
     
    public String retrouverNo(int n){
        //retrouve le no du bureau à partir de son code
        try{
          if (n==0){return "";}
          else{
       connection();
       ResultSet res = stmt.executeQuery("Select nobureau from bureau where codeBureau = '"+n+"'");
       res.next();
       if(res.wasNull()){res.close(); stmt.close();return null;}
     else {
       String no = res.getString(1);
       res.close();
       stmt.close();
       return no;
    }
     }}
      catch (Exception e) {System.out.println("" + e); return null;}
     }
    modéré par lunatix : ajout de balises code

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Par défaut
    A priori, au regard de ton code, tu ouvres une connexion, tu crées un Statement, tu crées un Resultset. Jusqu'ici tout va bien...

    Tu lances ensuite ta requete, sur ton objet statement, ca va toujours...

    Lorsque tu as fini, (resultset vide ou non) tu fermes ton resultset, tu fermes ton statement, MAIS, tu ne fermes jamais ta connexion...

    Il te manque un a la fin.

    Statement et Connection sont des objets de type différents. Ta connexion est recréé a la fin, mais la précédente n'est pas fermée...
    -> connexion fantome...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 188
    Par défaut
    Ah OK super! Merci beaucoup pour ton aide.
    Bon WE

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Par défaut
    Je t'en prie, bon week end...

    Et n'oublie pas le tag Resolu, si ca marche bien...

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 21/07/2013, 07h21
  2. Connection Java -> Free.fr
    Par blins dans le forum Outils
    Réponses: 8
    Dernier message: 17/07/2008, 11h50
  3. connection java openldap
    Par selabd dans le forum Sécurité
    Réponses: 3
    Dernier message: 14/05/2007, 09h30
  4. problème de connection java avec postgres
    Par jayfaze dans le forum JDBC
    Réponses: 3
    Dernier message: 22/01/2007, 23h46
  5. Besoin de l'aide connection java-oracle 9i
    Par Dx_ter dans le forum Oracle
    Réponses: 6
    Dernier message: 28/12/2006, 12h08

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