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 :

createConnection() : 3 fois


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Par défaut createConnection() : 3 fois
    Bonjour à tous,

    J'ai un soucis lorsque j'essaie de créer des "connections" vers MySql. J'ai bien le Jar jdbc fournit par MySql et le connecteur Odbc (sous windows) fournit également par mysql.

    Ma méthode pour obtenir des connections est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    protected Connection getConnection() throws PersistenceException {
     
            try {
                Class.forName(jdbcDriver).newInstance();
                Connection con = DriverManager.getConnection(jdbcUrl, jdbcLogin, jdbcPassword);
                return con;
            } catch (Exception e) {
                logger.error(e.getMessage());
                throw new PersistenceException(e);
            }
        }
    Mon code marche la 1ere fois, la 2eme mais plante au 3e passage de façon systèmatique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    [MySQL][ODBC 5.1 Driver]Can't connect to MySQL server on 'localhost' (10061)
     
    java.sql.SQLException: [MySQL][ODBC 5.1 Driver]Can't connect to MySQL server on 'localhost' (10061)
        at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
        at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
        at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source)
        at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
        at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
    Quelqu'un aurait une idée ?

    Merci d'avance.
    Titi.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Peut-être le nombre maximum de connexions atteint sur le serveur mySQL...

    Fermes-tu la connexion après usage ?
    Pourquoi passes-tu par une passerelle jdbc-odbc et pas directement par le driver jdbc ?
    Peux-tu montrer un exemple de traitement qui fait appel à cette méthode ?

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Par défaut
    En fait j'ai même fait :

    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
     
    protected Connection getConnection() throws PersistenceException {
     
     
    		compteurCreate++;
    		logger.debug("<compteur create> " + compteurCreate);
     
    		try {
    			Class.forName(jdbcDriver).newInstance();
    			Connection con = DriverManager.getConnection(jdbcUrl, jdbcLogin, jdbcPassword);
    			return con;
    		} catch (Exception e) {
    			e.printStackTrace();
    			logger.error(e.getMessage());
    			throw new PersistenceException(e);
    		}
    	}
    et

    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
     
    protected void releaseConnection(Connection con) throws NullParameterException, PersistenceException {
    		if (con == null) {
    			throw new NullParameterException();
    		}
     
    		try {
    			con.close();
    		} catch (Exception e) {
    			logger.error(e.getMessage());
    			throw new PersistenceException(e);
    		}
     
    		compteurRelease++;
    		logger.debug("<compteur release> " + compteurRelease);
     
    	}
    et dans mes logs, j'ai :

    8/12/2007 14:37:51 DEBUG fr.lala (83) - <compteur create> 1
    18/12/2007 14:37:51 DEBUG fr.lala (140) - <compteur release> 1
    18/12/2007 14:37:51 DEBUG fr.lala (83) - <compteur create> 2
    18/12/2007 14:37:52 DEBUG fr.lala (140) - <compteur release> 2
    18/12/2007 14:38:45 DEBUG fr.lala (83) - <compteur create> 3
    18/12/2007 14:38:46 DEBUG fr.lala (140) - <compteur release> 3
    18/12/2007 14:38:46 DEBUG fr.lala (83) - <compteur create> 4
    18/12/2007 14:38:46 DEBUG fr.lala (140) - <compteur release> 4
    18/12/2007 14:38:56 DEBUG fr.lala (83) - <compteur create> 5
    java.sql.SQLException: [MySQL][ODBC 5.1 Driver]Can't connect to MySQL server on 'localhost' (10061)
    at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)

    Au niveau de l'utilisation, c'est seulement du select :

    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
     
    public synchronized List<Montype> findMontypes() throws NullParameterException, PersistenceException {
     
    		Connection con = null;
    		Statement stmt = null;
    		ResultSet rs = null;
    		try {
     
    			con = getConnection();
    			stmt = getStatement(con);
     
    			String sql = SQL_FIND_MonTYPES;
     
    			rs = executeQuery(sql, stmt);
     
    			List<Montype> list = process(rs);
     
    			return list;
     
    		} catch (Exception e) {
    			logger.error(e.getMessage());
    			throw new PersistenceException(e);
    		} finally {
    			try {
    				if (rs != null) {
    					rs.close();
    				}
    			} catch (Exception e) {
    				logger.error(e.getMessage());
    				throw new PersistenceException(e);
    			}
     
    			try {
    				if (con != null) {
    					releaseConnection(con);
    				}
    			} catch (Exception e) {
    				logger.error(e.getMessage());
    				throw new PersistenceException(e);
    			}
    		}
    	}
    sachant que j'ai fais aussi :

    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
     
    protected Statement getStatement(Connection con) throws NullParameterException, PersistenceException {
    		if (con == null) {
    			throw new NullParameterException();
    		}
     
    		try {
    			Statement stmt = con.createStatement();
    			return stmt;
    		} catch (Exception e) {
    			logger.error(e.getMessage());
    			throw new PersistenceException(e);
    		}
    	}
     
    protected ResultSet executeQuery(String sql, Statement stmt) throws NullParameterException, PersistenceException {
    		if (sql == null || stmt == null) {
    			throw new NullParameterException();
    		}
     
    		try {
    			ResultSet rs = stmt.executeQuery(sql);
    			return rs;
    		} catch (Exception e) {
    			logger.error(e.getMessage());
    			throw new PersistenceException(e);
    		}
    	}
    Et sinon, au niveau de la config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private static String jdbcDriver = "com.mysql.jdbc.Driver";
    private static String jdbcUrl = "jdbc:odbc:lala";
    private static String jdbcLogin = "lala";
    private static String jdbcPassword = "lala";
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Dans quelle classe se trouve la méthode getConnection() ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Par défaut
    findMontypes() est dans la classe B

    les autres methodes sont dans la classe A

    avec B extends A

    A priori, ça marche donc bien 4 fois, et ca plante à la 5eme (je disais 2 fois car en fait je lance 2 request à chaque clic)
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Peux-tu faire le test avec le driver JDBC ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Class.forName("com.mysql.jdbc.Driver");
    return DriverManager.getConnection("jdbc:mysql://localhost/nomDuSchema", user, password);
    Quelle version de mySQL, quelle version du driver JDBC ?

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Tu ne fermes pas le Statement dans ton code, peut-être que ça vient de là.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  8. #8
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Peut-être que ta base de données MySQL est configurée pour limiter le nombre de connection à 2 ?
    Remarque : n'oublie pas de fermer la connection quand tu a finis de t'en servir (méthode close()) .

    [edit] grilled [/edit]
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

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

Discussions similaires

  1. Afficher 2 fois le meme JPanel
    Par cmoulin dans le forum Composants
    Réponses: 3
    Dernier message: 11/05/2004, 09h33
  2. [Exe] Une seule application à la fois.
    Par Mister Nono dans le forum Général Java
    Réponses: 18
    Dernier message: 26/04/2004, 15h51
  3. Sélectionner un même enregistrement deux fois...
    Par Manu0086 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 02/02/2004, 13h09
  4. [Composant] Drag & Drop de plusieurs valeurs à la fois
    Par slowpoke dans le forum Composants VCL
    Réponses: 3
    Dernier message: 23/12/2003, 10h26
  5. Pb : malloc qui marche une fois sur deux .... ?
    Par guillaume_pfr dans le forum C
    Réponses: 14
    Dernier message: 21/07/2003, 09h52

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