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 :

Pb ResultSet avec une connexion ODBC MS SQL Server


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 104
    Points : 44
    Points
    44
    Par défaut Pb ResultSet avec une connexion ODBC MS SQL Server
    Bonjour,
    je n'arrive pas à récupérer dans un tableau les résultats de ma requête
    lorsque je les fais s'afficher, tous les résultats apparaissent
    mais lorsque je veux les stocker dasn la variable ResultData, la boucle s'arrête
    voici le code
    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
        public String[][] bddSelect(int nbRows) throws Exception {
     
            query = "select top "+nbRows+" cd_qps, nu_ins from bph..log_ps";
     
            Statement select = connection.createStatement();
            ResultSet result = select.executeQuery(query);
     
            int j = 0;
            int nbColumn = result.getMetaData().getColumnCount();
     
            String[][] resultData = new String[nbRows][nbColumn]; 
     
            while (result.next()) {
     
                for(int i = 1; i<= nbColumn; i++){
                    System.out.println("result.getString(): "+result.getString(i));  
                    //resultData[0][i] = result.getString(i);     <----   lorsque j'enlève ce commentaire la boucle se bloque
                }
     
               j++;
            }
     
            result.close();
            select.close();
     
            return resultData;
        }
    Je trouve ça très curieux
    vous auriez une idée ?

  2. #2
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Points : 645
    Points
    645
    Par défaut
    Hello,

    Tu as une exception ?
    Je sais que désormais vivre est un calembour,
    La mort est devenue un état permanent,
    Le monde est aux fantômes, aux hyènes et aux vautours.
    Moi je vous dis bravo et vive la mort.

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 104
    Points : 44
    Points
    44
    Par défaut
    non, aucune
    ma sortie standart donne
    select top 5 cd_qps, nu_ins from bph..log_ps
    result.getString(): 34634
    textMessage: No data found
    j'attends 5 lignes mais je n'en ai qu'une seule lorsque j'enlève le commentaire
    sinon, quand la boucle ne s'arrête pas j'ai bien 5*2 résultats:
    select top 5 cd_qps, nu_ins from bph..log_ps
    result.getString(): 34634
    result.getString(): 0
    result.getString(): 34548
    result.getString(): 0
    result.getString(): 34823
    result.getString(): 0
    result.getString(): 33834
    result.getString(): 0
    result.getString(): 34187
    result.getString(): 0

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 352
    Points : 445
    Points
    445
    Par défaut
    J'ai déjà eu un certain nombre de problèmes avec le driver ODBC et SQL Server (encore qu'a priori ce dernier n'y soit pour rien). En fait l'implémentation du driver présente pas mal de restrictions (entre autre il n'est pas supporté par certains outils de mapping tels que OJB).

    Pour résoudre ton problème tente de passer par une variable intermédiaire afin de n'accéder au ResultSet qu'une seule fois.

    Sinon, si tu peux, passe à un "vrai" driver JDBC : jTDS fonctionne très bien et est gratuit

    Jacques Desmazières

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 104
    Points : 44
    Points
    44
    Par défaut
    pour le driver j'ai une problématique qui m'oblige à me servir, temporairement, du bridge jdbc-odbc

    je ne me sers d'aucun outil de mapping pour le moment (et probablement jamais avec cette version odbc d'apèrs ton conseil )

    pour la variable intérmédiaire, j'ai essayé mais en vain
    j'ai la mauvaise impression que dès que je fais une affectation il se bloque...

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 104
    Points : 44
    Points
    44
    Par défaut
    encore 1 bizarrie
    ça, ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            while (more = result.next()) {
     
                String cd_qps = result.getString("cd_qps");
                String nu_ins = result.getString("nu_ins");
     
                resultData[j][1] = cd_qps;
     
                System.out.println(cd_qps +" "+nu_ins);
     
               j++;
            }
    ça, ça ne marche pas....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            while (more = result.next()) {
     
                String cd_qps = result.getString("cd_qps");
                String nu_ins = result.getString("nu_ins");
     
                resultData[j][1] = cd_qps;
                resultData[j][2] = nu_ins;
     
                System.out.println(cd_qps +" "+nu_ins);
     
               j++;
            }
    en ajoutant une seconde affectation, ma boucle s'est bloquée toute seule
    une exception est levée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    } catch (Exception e) {
                System.out.println("textMessage: " + e.getMessage());
            }
    et me donne
    select top 5 cd_qps, nu_ins from bph..log_ps
    textMessage: 2

  7. #7
    Membre régulier Avatar de Buch'
    Inscrit en
    Avril 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 61
    Points : 73
    Points
    73
    Par défaut
    Dans ton code tu utilise un j++ qui n'est réutilisé nulle part dans ton code.
    De plus tu semble stocker l'ensemble de tes renregistrements dans resultData[0][i] sans jamais faire varier [0] lorsque tu change d'enregistrement.
    Ne serait-ce pas dans resultData[j][i] qu'il faut que tu stock ton resultat ?

  8. #8
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 104
    Points : 44
    Points
    44
    Par défaut
    si Buck, à terme c ce que je veux faire
    mais je suis en plein tests...

    mon pb est ailleurs pour le moment
    je n'arrive pas à faire "passer " les résultats

  9. #9
    Membre régulier Avatar de Buch'
    Inscrit en
    Avril 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 61
    Points : 73
    Points
    73
    Par défaut
    as-tu réessayé ton premier code avec ce que je t'ai dit ?

  10. #10
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 104
    Points : 44
    Points
    44
    Par défaut
    oui, c la première chose que j'ai faite
    avec ce code là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            while (result.next()) {
     
                 for(int i = 1; i<= nbColumn; i++){
                     System.out.println("result.getString(): "+result.getString(i)); 
                     resultData[j][i] = result.getString(i);
                 }
     
                j++;
            }

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 352
    Points : 445
    Points
    445
    Par défaut
    N'aurais-tu pas un problème de IndexOfBoundsException :

    En effet, pour initialiser ton tableau tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int nbColumn = result.getMetaData().getColumnCount();
    String[][] resultData = new String[nbRows][nbColumn];
    Ensuite pour le remplir, tu exécute:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while (more = result.next()) {
    ...
    for(int i = 1; i<= nbColumn; i++){ 
              resultData[j][i] = result.getString(i);
    ...
    }
    Ce qui veut dire que lorsque tu vas récupérer la dernière colonne, tu vas dépasser la taille de ton tableau (ta boucle commence à 1, et le tableau commentce à 0).

    Donc soit tu reprends ta boucle avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i = 0; i< nbColumn; i++)
    Soit tu corrige l'affectation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultData[j][i-1] = result.getString(i);
    Jacques Desmazières
    [/quote]

  12. #12
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 104
    Points : 44
    Points
    44
    Par défaut
    non, si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int i = 0; i< nbColumn; i++){
                     System.out.println("result.getString(): "+result.getString(i)); 
                 }
    il me met l'erreur
    [Microsoft][Gestionnaire de pilotes ODBC] Index de descripteur non valide

  13. #13
    Membre régulier Avatar de Buch'
    Inscrit en
    Avril 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 61
    Points : 73
    Points
    73
    Par défaut
    idée peut être sotte je le consois mais bon...

    Et si tu essaies çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultData[j][i] = (String) result.getString(i);

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 352
    Points : 445
    Points
    445
    Par défaut
    Oups, j'avais oublié de spécifier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int i = 0; i< nbColumn; i++){
          System.out.println("result.getString(): "+result.getString(i+1));
    }
    Car le indices de colonnes commencent à 1 eux

    Jacques Desmazières

  15. #15
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 104
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par Buch'
    (String) result.getString(i);
    le .getString indique que l'on souhaite que le type du retour soit String
    de même, .getInt indiquerait que l'on souhaite un retour du type int

  16. #16
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 104
    Points : 44
    Points
    44
    Par défaut
    pour faire avancer le problème, récapitulons
    la syntaxe est bonne
    le driver est bon
    aucune exception n'est levée

    le premier problème c'est qu'il n'accepte pas la seconde boucle dans la première boucle, du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            while (result.next()) {
     
                for(int i = 2; i< nbColumn; i++){
                    System.out.println(result.getString(i));
                 }
            }
    la première boucle s'arrête dès la fin du premier tour
    y a comme qui dirait un gros schnouf

  17. #17
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 104
    Points : 44
    Points
    44
    Par défaut
    ok, je suis dsl

    il semble que le pb vient plutôt de ma variable resultData

    dès que je lui affecte une valeur, il bloque toute la classe

  18. #18
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 104
    Points : 44
    Points
    44
    Par défaut
    je vais donc m'en sortir tout seul comme un grand
    laissant chacun à ses projets

    et je voudrais juste remercier tous ceux qui ont répondu

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

Discussions similaires

  1. Problème d'écriture avec une connexion ODBC en vbscript
    Par SuperJacky dans le forum VBScript
    Réponses: 2
    Dernier message: 26/10/2009, 17h08
  2. [CognosScript] Encore des soucis avec une connexion ODBC
    Par ben_harper dans le forum Cognos
    Réponses: 1
    Dernier message: 23/06/2009, 19h08
  3. Réponses: 9
    Dernier message: 28/04/2008, 18h34
  4. Probleme de connexion avec une base de données SQL server
    Par lasvegas_parano dans le forum iReport
    Réponses: 29
    Dernier message: 19/07/2007, 10h17
  5. Problèmes d'accent avec une connexion ODBC et ADO
    Par michael.jacques dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/03/2005, 15h36

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