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] Persistence d'update de ResultSet


Sujet :

JDBC Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 23
    Points : 20
    Points
    20
    Par défaut [JDBC] Persistence d'update de ResultSet
    Bonjour,

    Je souhaite modifier les valeurs de mon resultset pour les réexploiter ensuite à l'aide de ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    //update du contenu de columna
    while(resulSet.next()){
           resultSet.updateString("columna", "aaa");
    }
     
     
    //affichage du contenu de columna
    resultSet.beforeFirst();
    while(resulSet.next()){
           System.out.println(resultSet.getString("columna");
    }
    Le résultat de ce bout de code montre que les valeurs qui auraient du etre updatées grace à la première boucle à "aaa" ne le sont pas.
    Lors de l'affichage des valeurs du resultset (deuxième boucle), les données qui se trouvaient dans columna avant l'update sont affichées.


    Voila comment je crée mon resultSet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
    Je ne veux pas updater la base de données, mais pourquoi les valeurs ne persistent pas dans le resultSet?

    Merci à tous :-)

  2. #2
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    Apparemment, les updates qui sont faites ne sont valables que lorsque le cursor n'est pas déplacé.
    Du coup ca oblige à faire les modifs juste avant d'exploiter les données ce qui n'est pas pratique du tout.

    Si quelqu'un a déjà réussi à contourner ce problème... Je suis preneur de toute autre solution.

  3. #3
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Pour quoi faire? Updater un ResultSet pour autre chose qu'updater la base de données??? Je suis sceptique....

  4. #4
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut Re: [JDBC] Persistence d'update de ResultSet
    Citation Envoyé par Jie.N
    Je ne veux pas updater la base de données, mais pourquoi les valeurs ne persistent pas dans le resultSet?
    Pour éviter les incohérences entre la BD et le contenu de ton ResultSet. Il est un intermédiare entre elle et ton programme, donc il ne DOIT pas te donner des éléments qui ne sont pas dans la base.

    Il me semble par conséquent que si tu veux exploiter tes données, tu dois faire un commit()... ou alors utiliser une structure autre que les ResulSet.

    ++
    Ingénieur Génie Logiciel et Systèmes d'Information
    Management des Nouvelles Technologies

    Ecole Supérieure d'Ingénieurs de Luminy (ESIL), Marseille

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    Je veux me servir du resultset comme espace de stockage avant d'écrire dans un fichier.

    Du coup ca donnait:

    -Récupération des données avec une requete
    -Modification des données dans le resultSet
    -Ecriture dans un fichier lors du parcours du resultSet

    Plutot que

    -Récupération des données avec une requete
    -Ecriture des données dans un autre espace de stockage (vector array...)
    -Modification des données dans le nouvel espace de stockage
    -Ecriture dans un fichier lors du parcours du nouvel espace de stockage

    Je gagnais en lisibilité et en simplicité...

    C'est peut etre pas optimal, qu'est ce que tu me conseillerais?

  6. #6
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    Re

    Le Vector me semble être la meilleure perspective pour ce genre d'opération. Il te permet de formater ainsi tes données comme tu le désires : c'est lui qui s'adapte à ton besoin, et non toi qui t'adapte aux exigences des ResultSet...

    ++
    Ingénieur Génie Logiciel et Systèmes d'Information
    Management des Nouvelles Technologies

    Ecole Supérieure d'Ingénieurs de Luminy (ESIL), Marseille

  7. #7
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par Jie.N
    Je gagnais en lisibilité et en simplicité...
    Je trouve la deuxième solution beaucoup plus lisible. Ensuite, simple, c'est plus abstrait comme concept, mais je trouve aussi ça plus simple.

    Après, c'est toi qui voit, mais je choisit définitivement la deuxième solution (et sans Vector... beurk)

  8. #8
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    Merci pour votre aide à tous les deux.

    En fait, je trouve un peu fastidieux de devoir passer par un nouvel espace de stockage pour l'exploitation de mes données.

    Je suis entièrement d'accord sur le fait qu'un vector (non array, je suis pas multithreadé ca suffira bien) serait pratique pour le stockage, mais ca reste une étape intermédiaire inutile ( àmon avis).

    C'est pourquoi j'aurais voulu modifier mes données au sein du resultset qui représente une échantillon à un instant donné de ma table.
    Car je ne souhaite pas être cohérent avec la base tt le temps.
    de plus que ce n'est pas le cas puisque j'utilise un TYPE_SCROLL_INSENSITIVE et que je ne fais donc pas de refreshRow().

    Bref tt ca pour dire que je trouve dommage de ne pas pouvoir faire des modifs sur mon resultset lorsque ce n'est pas destiné à être entré dans la base, mais bon...

    Pour finir, j'utilise les updates sur la ligne juste avant de l'écrire, c'est pas joli joli mais c'est le seul moyen que j'ai trouvé pour conserver la structure de mon code.

    Encore merci les gars, c'est sympa d'aider.

    Tchou, Jie.
    Vive la horde

  9. #9
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    de rien, le forum est là pour ça...

    Citation Envoyé par denisC
    Citation Envoyé par Jie.N
    Je gagnais en lisibilité et en simplicité...
    Je trouve la deuxième solution beaucoup plus lisible. Ensuite, simple, c'est plus abstrait comme concept, mais je trouve aussi ça plus simple.
    Moi aussi : je pense que ca provient simplement d'une habitude de coder, où l'on fait bien la distinction entre les façons habituelles de procéder, et le freestyle !

    Et puis je rajouterai qu'au niveau JVM ton Vector sera certainement plus léger à gérer pour contenir tes lignes intermédiaires qu'un ResultSet.

    Bonne chance.
    Ingénieur Génie Logiciel et Systèmes d'Information
    Management des Nouvelles Technologies

    Ecole Supérieure d'Ingénieurs de Luminy (ESIL), Marseille

Discussions similaires

  1. JDBC Update resultset
    Par grospatapouf dans le forum JDBC
    Réponses: 1
    Dernier message: 03/02/2009, 14h22
  2. [JDBC]Invalid Operation : Type de ResultSet
    Par zizou771 dans le forum JDBC
    Réponses: 7
    Dernier message: 10/10/2005, 11h56
  3. [JDBC] ResultSet et JavaBean
    Par peuh dans le forum JDBC
    Réponses: 4
    Dernier message: 07/10/2004, 12h02
  4. Réponses: 15
    Dernier message: 20/07/2004, 09h09
  5. [JDBC] ResultSet d'une Requête stockée
    Par YéTeeh dans le forum Oracle
    Réponses: 6
    Dernier message: 15/05/2004, 18h35

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