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 :

connexion postgres et nb de processus


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2003
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 84
    Points : 58
    Points
    58
    Par défaut connexion postgres et nb de processus
    Bonjour,
    j'ai un souci avec le nombre de processus sur une connexion postgres.
    j'ai une classe baseDonnees avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public static Connection connexionPostgres() {
    		try{
    			Class.forName("org.postgresql.Driver");
    			String url = "jdbc:postgresql://x.x.x.x:5432/TOTO";
    			Connection cn = DriverManager.getConnection(url,"xxxxx","xxxxx");
    			return(cn);			
    		}catch(Exception e){
    			System.err.println("pas de connexion a la base postgres");
    			return null;
    		}
    j'ai une autre classe insertBase ou je fais mes traitements avec :
    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
     
    try{
    					BaseDonnees.cn.setAutoCommit(false);
    					st1 = BaseDonnees.connexionPostgres().prepareStatement("insert into savsuivitr (cste,cetab,transp,numre,codecli,libcli,cdem,ind,cdecli,sit,just," +
    					"datenv,heure,com,nbcol,poids,an,mois,jour,aliv,mliv,jliv,indx) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
     
    					st1.setString(1, "CRP");
    					st1.setString(2, "E11");
    					st1.setString(3, transp);
    					st1.setString(4, pci);
    					st1.setString(5, clil);
    					st1.setString(6, cli);
    					st1.setString(7, ref);
    					st1.setString(8, ind);
    					st1.setString(9, refc);
    					st1.setString(10, sit);
    					st1.setString(11, just);
    					st1.setString(12, dtm);
    					st1.setString(13, h);
    					st1.setString(14, txt);
    					st1.setString(15, cp);
    					st1.setString(16, pds);
    					st1.setString(17, a);
    					st1.setString(18, m);
    					st1.setString(19, j);			
    					st1.setString(20, aenv);
    					st1.setString(21, menv);
    					st1.setString(22, jenv);
    					st1.setInt(23, indx);
    					st1.execute();
    					st1.close();
    				}catch (Exception e) {
    					// TODO: handle exception
    					creaFichier(ref, e.getMessage());
    				}
    				st1.close();
    				BaseDonnees.connexionPostgres().close();
    j'ai une classe traitementFichier ou je recupere les infos d'un fichier csv pour les envoyer vers insertBase. dans ce traitementFichier je fais aussi des appels a la connexion postgres pour traduire et verifier des infos.

    Mon pb est que lorsque je lance le prog et que je verifie sur les serveur postgres au niveau du gestionnaire de taches j'ai un nombre de process postgres.exe qui ne cesse de croitre.

    Quel est la bonne methode pour reduire ce nombre d'ouverture de processs?

    Merci pour votre indulgence

  2. #2
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Plutôt que de renvoyer une nouvelle connexion à chaque appel à la méthode connexionPostgres, stocke la connexion en attribut et tu en renvoi une nouvelle seulement si l'attribut est null.

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2003
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 84
    Points : 58
    Points
    58
    Par défaut re
    Merci de ta reponse mais un petit exemple serait le bienvenu parceque je ne vois pas ce que tu veux dire ...

  4. #4
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private static Connection  _connection;
    public static Connection connexionPostgres() throws Exception {
        if(_connection == null) {
            Class.forName("org.postgresql.Driver");
            String url = "jdbc:postgresql://x.x.x.x:5432/TOTO";
            _connection = DriverManager.getConnection(url,"xxxxx","xxxxx");
        }
        return _connection;
    }
    Je te conseille de ne pas catcher les exceptions ici pour ne pas avoir à renvoyer null. Sinon dans ton code qui appellera cette méthode, tu risques d'avoir des NullPointerException. L'idéal serait même de détailler les exceptions plutôt que d'utiliser le type générique Exception.

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2003
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 84
    Points : 58
    Points
    58
    Par défaut re
    Merci c'est ce que j'avais cru comprendre mais j'etais pas sur, par contre pour le catch j'en savais rien.
    Je test

    Merci encore

  6. #6
    Membre du Club
    Inscrit en
    Novembre 2003
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 84
    Points : 58
    Points
    58
    Par défaut rere
    Bon j'ai fait ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public static Connection connexionPostgres() throws Exception {
    		System.out.println("entree :"+cn);
    		if(cn == null){
    			Class.forName("org.postgresql.Driver");
    			String url = "jdbc:postgresql://xxx.xxx.xx.xx:5432/TOTO";
    			cn = DriverManager.getConnection(url,"xxxx","xxxx");
    		}
    			System.out.println("sortie :"+cn);
    			return(cn);
    	}
    resultat du sysout :
    entree :org.postgresql.jdbc3.Jdbc3Connection@97a560
    sortie :org.postgresql.jdbc3.Jdbc3Connection@97a560

    et voila comment j'appel dans mon autre classe la connexion
    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
     
    public String testDoublonD(String transp,String numre,String codecli,String sit,String just) {
    		/**on test dans la base postgres si l'enregistrement 
                     * existe ou pas
                     */
    			try{
    				pst = BaseDonnees.connexionPostgres().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 
    				rst = pst.executeQuery("select * from savsuivitr where transp='"+transp+"' and numre='"+numre+"' and codecli='"+codecli+"' and sit='"+sit+"' and just='"+just+"'");
    				if(rst.first()){
    					resultd = "vrai";
    				}else{
    					resultd ="faux";
    				}
    			}catch (Exception e) {
    				// TODO: handle exception
    				System.out.println("erreur test doublon");
    			}
    			return(resultd);
    	}
    le retour resultd est null et l'appli s'arrete.

    Merci

  7. #7
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Qu'est-ce qui est null exactement? tu as une trace? il faut au moins faire e.printStackTrace() dans un catch. Avec ton catch, on ne saura pas pourquoi l'exception arrive.

  8. #8
    Membre du Club
    Inscrit en
    Novembre 2003
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 84
    Points : 58
    Points
    58
    Par défaut rerere
    Bon c'est une erreur de ma part j'ai trouve bien cachee une ligne qui mettait ma connection a close, une fois supprimer cette ligne ca fonctionne.

  9. #9
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    J'allais oublier, tu devrais regarder :
    Doit on fermer un ResultSet ?
    Doit on fermer un Statement ?

    Et n'oubli pas le bouton Résolu si tout va bien

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

Discussions similaires

  1. Pbl de connexion à PostGres depuis un Windows2000
    Par laurent_ifips dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 11/04/2006, 21h40
  2. [VB.NET]Connexions multiples pour un même processus.
    Par leSeb dans le forum Windows Forms
    Réponses: 16
    Dernier message: 14/03/2006, 09h53
  3. connexion postgre
    Par mrtatou dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 12/03/2006, 09h36
  4. [TOMCAT] pool de connexion postgres
    Par kitov dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 04/06/2004, 16h13
  5. [JBuilder]connexion postgres ou mysql via DataExpress
    Par rebolon dans le forum JBuilder
    Réponses: 12
    Dernier message: 07/08/2003, 16h45

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