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

Développement Web en Java Discussion :

Exception inattendue : getString() sur Resultset


Sujet :

Développement Web en Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 131
    Points : 46
    Points
    46
    Par défaut Exception inattendue : getString() sur Resultset
    Bonjour,

    J'ai une vieille appli java qui tourne parfaitement sur windows. J'ai décidé de la déplacer sur un serveur linux. Le code source est donc strictement le même. J'ai pour autant une exception qui revient tout le temps lorsque je parcours des resultsets et que j'utilise la méthode getString() :

    com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)

    Je précise que pour certains champs, il n'y a pas de souci, et pour d'autres, l'exception est levée.

    J'avais cette même exception également pour certains résultsets que je parcourais après avoir fermé la connexion. Visiblement en bougeant le connexion.close, ça passe.

    Est ce que quelqu'un pourrait me mettre sur la voie ?

    Merci beaucoup.

  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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    La batterie de ma boule de cristal étant épuisée, ça va être difficile de t'aider avec aussi peu d'informations utiles...

    Pour caricaturer, j'ai un programme qui fait une NullPointerException, quand je ne passe pas par la fonction, il fonctionne... Peux-tu m'aider ?

    Montre au moins le code...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    Salut, merci pour ta réponse. Pardon pour le peu de précisions, c'est que comme le code marche sur mon serveur sous windows....

    J'avance un peu : l'erreur se produit sur les champs date.

    Voici l'exception plus détaillée (ça m'avait échappé, plus bas dans la trace) :

    Exception :com.mysql.jdbc.ResultSet.getDateFromString(ResultSet.java:2048)

    Le code source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ResultSet resultatRequete=statement.executeQuery();
                            while (resultatRequete.next()){
                                String[] courrier=new String[8];
                                courrier[0]=(String)resultatRequete.getString("numero");
                                courrier[1]=(String)resultatRequete.getString("annee");
                                courrier[2]=(String)resultatRequete.getString("dateFin");
                                courrier[3]=(String)resultatRequete.getString("Service");
                                courrier[5]=(String)resultatRequete.getString("type");
                                courrier[6]=(String)resultatRequete.getString("identite");
                                courrier[7]=(String)resultatRequete.getString("objet");
                                resultat.add(courrier);
                            }
    L'exception est levée à la ligne suivante : courrier[2]=(String)resultatRequete.getString("dateFin");

    J'ai trouvé ça sur le net :

    SELECT IF(NomeDoCampoData = '0000-00-00', NULL, NomeDoCampoData) AS NomeDoCampoData FROM tbl;

    J'essaye et je vous tiens au jus.

  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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Pourquoi faire un cast String sur une méthode getString() ?

    Ceci dit, ça ne devrait pas poser de problème.
    Quelle est la version de ton driver JDBC MySQL ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    Merci de t'intéresser à mon souci !

    Euh, oui, le cast n'a aucun intérêt. Le code n'est pas de moi

    Par contre, comment connaître la version du pilote JDBC ? Il ne fait pas partie des librairies externes importées dans le classpath du projet dans Eclipse...

    Pardon, mais mon dernier développement en java remonte à plus de cinq ans...

    Au fait, l'ajout de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IF(c.datefintrt = '0000-00-00', NULL, c.datefintrt) dateFin
    semble résoudre le souci (plus d'exception).. Mais j'aimerais mieux ne pas avoir à retoucher le code.

  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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Dans la mesure ou le code d'origine ne pose aucun problème au driver JDBC de MySQL (je l'ai testé en version 5.1.7), il serait préférable de vérifier la piste d'une ancienne version du driver (à mon avis).

    Le code
    IF(c.datefintrt = '0000-00-00', NULL, c.datefintrt) dateFin
    me paraît vraiment barbare.
    C'est vrai que MySQL a (ou avait) une valeur par défaut pour les champs date à "0000-00-00" ce qui est absurde, mais que je sache, ça reverrai plus vers un problème de driver (si lui même n'est pas foutu d'interpréter la valeur par défaut de sa propre base )

    Par contre, je ne comprends pas ce que tu veux dire par "il ne fait pas partie des librairies externes...". Il est référencé comment ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    Euh ben y'a ça en haut des classes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import java.sql.Connection; 
    import java.sql.Statement; 
    import java.sql.PreparedStatement; 
    import java.sql.ResultSet; 
    import java.sql.DriverManager;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static final String  CLASSE_JDBC="com.mysql.jdbc.Driver";
    et après la connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    connection = DriverManager.getConnection(CHAINE_CONNEXION, COMPTE,MOT_DE_PASSE);
    Mais j'ai rien dans eclipse quand je vais dans les propriétés du projet dans les librairies du build-path.

    Ce driver est inclu dans la JRE ? Je pensais le trouver dans les librairies externes... ?

    Pardon si mes questions paraissent débiles, mais je suis vraiment pas très au faîte du dev en java.. Faudrait que je me replonge dedans correctement.

  8. #8
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Dans une application web, on place généralement les resources jar dans /WEB-INF/lib
    Sinon, on peut les placer dans le répertoire du serveur d'application.
    (Avec Tomcat, ce serait dans C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib par exemple)

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 131
    Points : 46
    Points
    46
    Par défaut
    Bien vu ! merci beaucoup, j'ai mis le connecteur Java à jour et tout roule ! La version devait être trop vieille pour la dernière version de mysql

    Merci encore !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/01/2012, 17h22
  2. exception avec pagination sur gridview
    Par intissar_g dans le forum ASP.NET
    Réponses: 16
    Dernier message: 27/07/2011, 17h31
  3. jprogressbar sur ResultSet
    Par mmb04 dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 13/04/2007, 08h28
  4. renseignement sur ResultSet et Statement
    Par baptwo dans le forum JDBC
    Réponses: 2
    Dernier message: 28/08/2006, 14h30
  5. Erreur sur ResultSet : forward-only ???
    Par Yaz dans le forum JDBC
    Réponses: 4
    Dernier message: 06/07/2005, 15h33

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