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 :

Problème de fermeture de connexion


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 157
    Points : 66
    Points
    66
    Par défaut Problème de fermeture de connexion
    Bonjour à tous,
    Voilà, j'ai une classe qui me sert à faire des requêtes dans différentes bases de données afin de tester leur bon fonctionnement. Toutes les requêtes et les paramètres de connexion de chaque base sont stockés dans un fichier xml

    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
    45
    46
    47
    48
     
    public class CheckDataBase {
     
    		public static ResultParameters checkData(DbParameters db) throws SQLException{
     
    		Connection connection   = null;
    		Statement statement 	= null;
    		ResultSet resultSet		= null;
    		ResultParameters result = null;		
    		Exception reponseData = null;
    		boolean ok = true;
     
    			try { 
    				Class.forName(db.getDriver()); 				  				  				  
    				connection = DriverManager.getConnection((db.getAdresse()+ db.getHostname()+ db.getDbname()),db.getUser(),db.getLogin());
    				statement = connection.createStatement();
    				resultSet = statement.executeQuery(db.getRequetesql());
     
    					while(resultSet.next())
    						{
    						String nom = resultSet.getString(db.getNomcolonne());										 								 			
    						}				
    				}	
     
    			catch (ClassNotFoundException e) {
    				ok = false;
    				reponseData = e;
    				//System.out.println("Base " + db.getDbname() + " : Driver JDBC non trouvé : " + e);
    				}
    			catch (SQLException e) {
    				ok = false;
    				reponseData = e;
    				} 
    			finally{
     
    					if(ok){
    						//ajout un test bon				
    						result = new ResultParameters(db.getDbname(),reponseData.toString(),"OK");									
    					}
    					else{
    						//ajout un test faux
    						result = new ResultParameters(db.getDbname(),reponseData.toString(),"KO");	
    					}
    					//connection.close();
     
    				return result; 
    			}								   									  
    	 }
    le problème est que si je ferme la connexion après chaque requête, j'ai une erreur de type javaNullPointerException :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [06/11/06 11:25:20:780 CET] 5ef90107 SystemErr     R java.lang.NullPointerException
    [06/11/06 11:25:20:780 CET] 5ef90107 SystemErr     R 	at sentinelle.outils.CheckDataBase.checkData(CheckDataBase.java:57)
    [06/11/06 11:25:20:780 CET] 5ef90107 SystemErr     R 	at sentinelle.appli.MainSentinelle$RepetSentinelle.run(MainSentinelle.java:154)
    [06/11/06 11:25:20:780 CET] 5ef90107 SystemErr     R 	at java.util.TimerThread.mainLoop(Timer.java:446)
    [06/11/06 11:25:20:780 CET] 5ef90107 SystemErr     R 	at java.util.TimerThread.run(Timer.java:396)

    la methode de cette classe permettant de faire les requêtes est appelée dans
    une autre classe qui utilise les classes timer et timertask avec la méthode run. D'autre part à chaque fois qu'une connexion à une base échoue, j'utilise un timer et la méthode sleep pour arrêter les requêtes sur la base correspondante
    merci de votre aide!

  2. #2
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Tu initialise ton responseData à null... Et si il n'y a pas d'erreur, il reste null... Et quand tu arrive dans le finally, le responseData.toString() va forcement te balancer un NullPointerException

    Et n'oublie pas de fermer ta connection dans le finally !

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    De plus on ne doit pas faire de return dans un bloc finally : cela pourrait te cacher la remontée d'éventuelle exception !

    Les bloc finally ne sont pas fait pour ça, mais pour libérer les ressources !

    a++

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 157
    Points : 66
    Points
    66
    Par défaut
    Merci pour vos réponses, j'ai corrigé mes erreurs mais le problème persiste...des idées?? je pense que cela vient du fait que j'utilise une méthode qui effectue des requêtes sql dans une méthode run issue de la classe TimerTask

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 157
    Points : 66
    Points
    66
    Par défaut
    c'est bon il fallait juste que je rajoute une condition dans le cas ou la connection est null

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

Discussions similaires

  1. Problème de fermeture de connexion
    Par laville dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/08/2007, 16h05
  2. Ouverture fermeture de connexion à une bdd
    Par marqs dans le forum Accès aux données
    Réponses: 2
    Dernier message: 01/04/2007, 17h04
  3. Explication fermeture de connexion Mysql
    Par ideal dans le forum Requêtes
    Réponses: 1
    Dernier message: 13/11/2006, 15h42
  4. Fermeture de connexion en cas d'arrêt brutal
    Par Bartuk dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 30/05/2006, 16h12
  5. Réponses: 6
    Dernier message: 04/05/2006, 11h44

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