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 :

[JDBC]ResultSet:Index de descripteur non valide


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Points : 122
    Points
    122
    Par défaut [JDBC]ResultSet:Index de descripteur non valide
    Bonjour à tous,

    J'ai une table qui est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    create table commande (
    idCmd integer,
    dateCmd date,
    libelleCmd varchar(10)
    );
    J'exécute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String query="select * from commande";
    ResultSet rs=statement.executeQuery(query);
    puis si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    System.out.println(rs.getInt("idCmd"));
    System.out.println(rs.getDate("dateCmd"));
    System.out.println(rs.getString("libelleCmd"));
    cela fonctionne bien, car selon moi, les colonnes sont dans cet ordre c'est à dire idCmd,dateCmd,libelleCmd

    Par contre, si j'inverse l'utilisation des colonnes comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    System.out.println(rs.getDate("dateCmd"));
    System.out.println(rs.getInt("idCmd"));
    System.out.println(rs.getString("libelleCmd"));
    J'obtiens en retour:
    Erreur SQL java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]Index de descripteur non valide
    Pourquoi d'après vous ?
    Est-ce normal ?

    Merci pour votre aide.
    ++

  2. #2
    Membre habitué Avatar de Xavinou
    Inscrit en
    Mai 2005
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 135
    Points : 156
    Points
    156
    Par défaut
    non c'est pas normal !

    il n'y a pas une autre différence entre les deux appels que l'ordre ?

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Points : 122
    Points
    122
    Par défaut
    Non j'ai tout essayé c la seule différence.
    Initialement, je pensais que c t un problème de type, mais ce n'était pas ça.
    J'ai essayé avec d'autres tables, avec d'autres colonnes, mais le problème est le même. Je ne sais pas si cela peut jouer ou pas, mais, j'utilise une source de donnée et le driver utilisé est celui d'ODBC:JDBC.

    Merci.
    ++

  4. #4
    Membre habitué Avatar de Xavinou
    Inscrit en
    Mai 2005
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 135
    Points : 156
    Points
    156
    Par défaut
    une idée de test : tu prends le code qui marche et tu modifies l'ordre des colonnes dans la table ?

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Points : 122
    Points
    122
    Par défaut
    Ouais pas bête comme test.

    J'ai donc gardé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    System.out.println(rs.getInt("idCmd"));
    System.out.println(rs.getString("libelleCmd"));
    et au lieu de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String query="select idCmd,libelleCmd from commande"
    puisque ça fonctionnait, j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String query="select libelleCmd,idCmd from commande"
    Et ça a fonctionné.
    J'ai ensuite testé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    System.out.println(rs.getString("libelleCmd"));
    System.out.println(rs.getInt("idCmd"));
    et ça a fonctionné aussi.

    ????
    Une idée ?

    ++

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Points : 122
    Points
    122
    Par défaut
    En fait on dirait que cela est dû à la colonne idCmd.
    En effet, si je fais la même chose mais sans utiliser la colonne idCmd, il n'y a pas de problème.

  7. #7
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    Il y a quelques subtilités dans la javadoc sur les ResultSet et en particulier :
    Citation Envoyé par Quelqu'un de chez Sun
    For maximum portability, result set columns within each row should be read in left-to-right order, and each column should be read only once.
    Autrement dit, il est recommandé de lire les données du ResultSet de gauche à droite, et une seule fois.

    D'ailleurs, j'ai déjà eu des soucis (il y a longtemps et ça a peut-être changé depuis) avec des applis VB et Access : des erreurs remontaient lorsque j'essayais de lire plusieurs fois des données d'un RecordSet (équivalent aux ResultSet de Java) => ça venait du driver ODBC qui ne veut pas qu'on lise 2 fois la même donnée. J'aurais peut-être eu aussi des soucis si je n'avais pas respecté l'ordre des colonnes...

    De toutes façons : il est déconseillé de faire des select * ! Il faut toujours nommer les colonnes de la requête (select colonne1, colonne2, ...)

  8. #8
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Points : 122
    Points
    122
    Par défaut
    De toutes façons : il est déconseillé de faire des select * ! Il faut toujours nommer les colonnes de la requête (select colonne1, colonne2, ...)
    Oui je suis tout à fait d'accord avec ça, je nomme mes colonnes. J'avais lu ce conseil sur ce site et il était proposé par SQLPro.

    Mais ce qui reste étrange est le fait est que l'ordre doit être respecté uniquement pour idCmd (qui est la clé primaire).
    Si les autres colonnes sont inversés, ce n'est pas gênant.

    ++

  9. #9
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2018
    Messages : 3
    Points : 4
    Points
    4
    Par défaut J'ai la même erreur et je ne trouve pas de solution facile
    J'ai un requête SQL qui ce connect par le Driver ODBC SQL Server Driver
    Le requête SQL fourni des renseignement qui ce trouve dans une plage de date précise
    Comme dans bien d'autre cas, je n'ai qu'a ajouter dans mon code, le signe ? comme paramètre et Excel me demande ou est la valeur de mon paramètre. je lui donne tout simplement la cellule de ma feuille que j'ai intitulé "Démarrer" dans la cellule A1 j'inscrit "Donner moi la date de traitement :" et dans la cellule B1 j'inscris la date

    Sauf que... cela ne fonctionne qu'avec Microsoft Query ...
    Mais comble de malheur, cela me retourne un message d'erreur

    [Microsoft][ODBC SQL Server Driver]Index de descripteur non valide

    Pourtant lorsque j'inscris ma date directement dans la propriété de ma connexion, cela fonctionne c'est seulement lorsque j'essai de le mettre en paramètre que je reçois ce message
    Nom : Erreur Excel.png
Affichages : 1245
Taille : 4,5 Ko

    Si quelqu'un as trouvé une solution au problème de Microsoft Excel ..

Discussions similaires

  1. [JDBC-ODBC] Etat de curseur non valide
    Par I o dans le forum JDBC
    Réponses: 7
    Dernier message: 04/05/2015, 12h22
  2. Réponses: 7
    Dernier message: 03/09/2007, 12h57
  3. IOException : Descripteur non valide
    Par akrobat dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 20/06/2006, 09h12
  4. [JDBC][SQLException] Etat de curseur non valide
    Par chti_juanito dans le forum JDBC
    Réponses: 7
    Dernier message: 03/11/2005, 20h13
  5. TThread et waitfor - descripteur non valide
    Par code34 dans le forum Langage
    Réponses: 2
    Dernier message: 27/10/2003, 23h44

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