Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2952 connectés 

  FORUM HardWare.fr
  Programmation

  [JDBC]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JDBC]

n°20057
lulu77fr
Posté le 23-03-2001 à 11:11:15  profilanswer
 

Si qqun aime bien débugger....
Lorsque l'appli quitte, java plante. Pour koi, mystère et.....
Et ce n'est pas la fermeture de la connexion à la base de données puisque je n'ai pas d'exception SQL à ce moment là. J'ai à nouveau le prompt DOS. C'est juste après que le message d'erreur apparaît...
 
JDK1.2, JRE1.3, NT4.0
 
LuLu,
 
import java.sql.*;
 
public class DB
{
 
  public static void main(String[] arg)
{
 Statement statementDB=null;
 Connection connectionDB=null;
        ResultSet rsRequete=null;
 // Chargement du driver JDBC
 try
 {
 Class.forName ("RmiJdbc.RJDriver" ).newInstance();
 }
 catch (Exception e)
 {
 System.err.println("Chargement du pilote JDBC impossible." );
 System.err.println(e);
 }
 
 // Etablissement de la connexion
 try
 {
 // URL d'accès à la base de données
 String url = "jdbc:odbc:Clients";
 
 // L'hote RMI est sur strAddressServer
 String rmiHost = new String("//BTW28617" );
        connectionDB = DriverManager.getConnection
        ("jdbc:rmi:"+ rmiHost + "/" + url);
 
 statementDB =connectionDB.createStatement();
 System.out.println ("Connexion a la base etablie\n" );
 }
 catch(SQLException e)
 {
 System.err.println("***** OpenConnection Exception SQL : *****\n" );
 while (e != null)
 {
 System.out.println("Message :" + e.getMessage ());
 System.out.println("Etat :" + e.getSQLState ());
 System.out.println("Code Erreur : " + e.getErrorCode () + "\n" );
 e = e.getNextException();
 }
}
 
 
 String strRequest = "SELECT Id_Forfait FROM Abonnes WHERE (Num_Abonne = 0612345678 AND Pwd_Abonne = 1234)";
 String fichier="";
 try {
  rsRequete=statementDB.executeQuery(strRequest);
     if(rsRequete.next())
  {
   fichier="/AAC/HTML/Accueil_Changement_Forfait.jsp?";
        fichier += "FORFAIT="+rsRequete.getInt("Id_Forfait" );
 fichier += "&NUM_ABO="+strNumTel;
  }
      }
 catch(SQLException e)
 {
 System.err.println("***** Exception SQL : *****\n" );
 while (e != null)
 {
 System.out.println("Message :"+e.getMessage ());
 System.out.println("Etat :"+e.getSQLState ());
 System.out.println("Code Erreur :" + e.getErrorCode () + "\n" );
 e = e.getNextException();
 }
 }
 System.out.println(fichier);
 try {
  rsRequete.close();
  statementDB.close();
  connectionDB.close();
  if(connectionDB.isClosed())
    System.out.println("Connexion a la base fermee\n" );
  }
 catch(SQLException e)
 {
 System.err.println("****** CloseConnection Exception SQL : *****\n" );
 while (e != null)
 {
  System.out.println("Message :     " + e.getMessage ());
  System.out.println("Etat :        " + e.getSQLState ());
 System.out.println("Code Erreur : " + e.getErrorCode () + "\n" );
 e = e.getNextException();
 }
 }
   }
}

mood
Publicité
Posté le 23-03-2001 à 11:11:15  profilanswer
 

n°20219
[FDS]
Posté le 23-03-2001 à 23:30:37  profilanswer
 

A mon avis c la fermeture de la connexion à la base qui pose pb.
Le garbage collector libère la mémoire, pas les ressources externes.
 
Commence par créer une méthode pour nettoyer les ressources autres que la mémoire comme par exemple une connexion à une base de données.
 
public synchronized void libererRessources() throws SQLException
{
   if (connexion != null)
   {
      connexion.close();
      connexion = null;
   }
}
 
 
et redéfini la méthode finalize pour libérer les ressources externes avant l'objet.
 
protected void finalize() throws Throwable
{
   try  
   {
       libererRessources();
   }
   finally  
   {
       super.finalize();
   }
}

n°20662
lulu77fr
Posté le 27-03-2001 à 10:14:47  profilanswer
 

C'est étonnant, car une simple ouverture/fermeture de la base ne provoque pas de plantage...

n°20984
[FDS]
Posté le 28-03-2001 à 13:38:47  profilanswer
 

tu as quoi exactement comme message d'erreur à la fermeture de l'appli (un message de tes catch ou une erreur de la JVM) ???
 
Sinon, es tu sur de ne pas masquer une exception dans tes try/catch ???  
Car si tu as par exemple un NullPointerException dans ton try et que tu traite seulement une exception de type SQLException dans ton catch, tu ne seras pas que l'exception NullPointerException a été levé. Pour tester remplace dans tes catch SQLException par
Exception en faisant un printStackTrace() pour voir l'état de la pile.

n°20995
lulu77fr
Posté le 28-03-2001 à 13:57:26  profilanswer
 

C'est une erreur de la JVM : "l'instruction à "0x77b3cd19" emploie l'adresse mémoire "0x77b3cd19". La mémoire ne peut pas être read"....
Même en remplaçant tous les catch SQLException par des Exception rien ne sort à l'écran.
J'ai tout de même remarqué qu'en faisant un OpenConnection suivi d'un CloseConnection (sans faire de requêtes), les manips que je passe ensuite (qui plante habituellement l'appli) fonctionnent parfaitement.  
Pour l'instant, c'est donc faire une ouverture/fermeture de connexion à la base de données avant de passer à la suite. étrange, étrange...

n°21107
lulu77fr
Posté le 28-03-2001 à 15:58:16  profilanswer
 

A priori, j'ai trouvé l'erreur....
Il semblerait lors de mes affectations qu'il faut employer le this...Pb d'instances des variables donc...
 
Par ex., au lieu de:
connectionDB = DriverManager.getConnection ("jdbc:rmi:"+ rmiHost + "/" + url);  
je fais : this.connectionDB = DriverManager.getConnection  
        ("jdbc:rmi:"+ rmiHost + "/" + url);  
 
et ainsi  pour chaque affectation/allocation....
 
et maintenant ça va...

n°21226
lulu77fr
Posté le 29-03-2001 à 08:51:52  profilanswer
 

rectificatif....
Ce que j'ai fait hier n'a en fait rien changé...je me suis bluffé tout seul.
Il me semble avoir par contre localisé le pb.:la requête SQL:SELECT Id_Forfait FROM Abonnes WHERE (Num_Abonne = 0612345678 AND Pwd_Abonne = 1234)";  
 
lorsque j'enlève la clause WHERE, et bien ca ne plante plus...véridique
 
Lulu


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [JDBC]

 

Sujets relatifs
Applet java + connexion JDBC 
Plus de sujets relatifs à : [JDBC]


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)