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 Update resultset


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Par défaut JDBC Update resultset
    Bonjour à tous,
    Je suis confronté à un prob bien particulier et je sollicite votre aide.
    Je fais une requete SQL à l'aide de l'instruction suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     ResultSet rs= null;
     Statement stmt = connection.createStatement();
    rs =stmt.executeQuery("SELECT * FROM "+maTable + " WHERE XYZ="+uneValeur);
    //l'instruction parfois retourne un enregistrement unique, donc je fais
    if (rs.next())
    {
          //TRAITEMENT
          ////Mais parfois elle ne retourne rien, dépend de la table et valeur passées. Donc,
    }else{
       // Je veux mettre des valeur dans ce ResultSet en vue d'une insertion dans la base plustard.
       rs.moveToInsertRow();
       wds2.updateString("CLIENT", "ABC");//attribution de la valeur "ABC" pour la colonne "CLIENT"
    }
    Mais avant l'insertion de la nouvelle valeur dans la base, je dois faire des vérifications. J'essaie donc de récupérer cette valeur avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       String str = rs.getString("CLIENT");
    Seulement voilà, ça plante et j'ai une exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.lang.ArrayIndexOutOfBoundsException: -2
    Ma question est donc,
    1. Quand j'ai un "rs" vide à la suite d'une requete et après l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     wds2.updateString("CLIENT", "ABC");
    est-ce que mon "rs" contient effectivement la valeur que je lui donne, dans le cas présent, "ABC" pour "CLIENT"?
    2. Si elle est dans mon "rs", comment la récupérer sans les inserer dans la base avec,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    rs.updateRow();
    //ou bien
    rs.insertRow();
    Car je ne voudrais faire la mise à jour dans la base qu'une fois que les vérifications faites.
    En somme, je voudrais donner des valeurs dans un ResultSet vide, faire des vérifications et si certains conditions sont réunies, insérer ces valeur dans la base.

    Pourriez-vous m'aider? Vous me rendriez un énorme service.
    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Par défaut
    rebonjour,
    Je viens de trouver l'astuce et je vous donne la solution. Si qn est dans la même galère que moi, ça peut aider.

    Par défaut, la connection JDBC est est mode Auto-Commit. Don, j'ai changé cette propriété avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    connection.setAutoCommit(false);
    Avec cette instruction, tant que je fais pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    connection.commit();
    aucune donnée ne sera insérée dans la base. Ensuite, j'ai récupéré le "Statement" avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    stmt = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
    Puis j'ai fait ma requete, mais elle ne ramène rien.
    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
     
    if (rs.next())
    {
          //traitement  		
    }
    else 
    {
        //Je prépare la valeur à insérer.   		
        rs.moveToInsertRow();//déplace le curseur, mais le
                             //ResultSet doit être "updatable" comme
                            //j'ai fait ci-dessus
    //ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE
        rs.updateString("CLIENT", "abc");
        rs.updateString("NOM", "toto");
        rs.insertRow(); //la table ne sera pas mise à jour puisque
                             //setAutoCommit() est FALSE.
    }
     
    StringBuffer  str = new StringBuffer();
    rs.beforeFirst();//je ramène le curseur avant le 1er enregistrement
    while (rs.next()){
        str.append(rs.getString("CLIENT"));
        str.append(",");
        str.append(rs.getString("NOM"));
    }
    System.out.println(str);
    A l'affichage j'obtiens
    voilà le travail, s'il existe d'autres solutions, je suis à l'écoute.

    PS (à l'attention des modérateurs): Je vais laisser ce poste pour voir des réactions d'autres personnes, éventuellement d'autres idées. Je le mettrai comme "résolu",
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(int i= 0; i<10;i++)
    {
        System.out.println("PROMIS !");
    }

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

Discussions similaires

  1. [Data] Spring JDBC update clause in
    Par ekremyilmaz dans le forum Spring
    Réponses: 1
    Dernier message: 25/09/2012, 10h22
  2. Problème lenteur JDBC / ACCESS / ResultSet next()
    Par SebastianPx dans le forum JDBC
    Réponses: 11
    Dernier message: 22/04/2009, 20h29
  3. [JDBC]Plusieurs ResultSet en même temps ?
    Par Baptiste Wicht dans le forum JDBC
    Réponses: 4
    Dernier message: 19/05/2006, 11h42
  4. [JDBC] erreur "ResultSet is closed" pour 2 requêtes
    Par Lady_jade dans le forum JDBC
    Réponses: 2
    Dernier message: 26/10/2005, 09h54
  5. [JDBC] Probleme ResultSet
    Par DanZzz dans le forum JDBC
    Réponses: 8
    Dernier message: 26/07/2005, 06h47

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