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 :

ResultSet(acceder au dernier element)


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Points : 88
    Points
    88
    Par défaut ResultSet(acceder au dernier element)
    Salut

    mon problème est que je veut acceder directement au dernier element d'un ResujltSet

    d'une requete sans faire la boucle while (res.next())

    merci d'avance.

  2. #2
    Membre éclairé
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Points : 844
    Points
    844
    Par défaut
    Pourquoi ne pas inverser l'ordre de la requete et récuperer le 1er élement ?

    Sinon, il faut aller voir du coté de FETCH_REVERSE (constante de ResultSet) mais cela peut ne pas fonctionner selon le driver.
    JBusyComponent, une API pour rendre occupé un composant swing.
    SCJP Java 6.0 (90% pass score)

  3. #3
    Membre habitué Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Points : 191
    Points
    191
    Par défaut jca peut marcher
    while(res.next()){}
    //dernier élément

    jamais testé mais ca peut le faire
    On ne peut créér ce qu'on ne peut imaginer...
    Tu sens la puissance du BIT?

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Salut

    Il existe bien une instruction pour se positionner directement à la fin du resultset :
    rset.last()

    sinon :
    rset.first() pour le premier élément du resultset, next() pour le suivant et previous() pour le précédent.

  5. #5
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Points : 88
    Points
    88
    Par défaut
    Bonjour merci pour vous réponses.

    je travaille actuelement avec 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
    14
    15
    16
    17
    18
    19
      public void ChercheTable(String RefProduit){	 
     
    	  String req="SELECT Production_J,PC,Livraison_J,LC FROM omag_valeur WHERE Date ='"+date+"' AND RefProduit ='"+RefProduit+"'"; 
          Requete resultat = new Requete(conn,req,1); 
     
          try{  
     
        	  while(resultat.resultat.next()){  
     
        		PJ=resultat.resultat.getDouble(1);  
        		PC=resultat.resultat.getDouble(2);  
        		LJ=resultat.resultat.getDouble(3);  
        		LC=resultat.resultat.getDouble(4);    		   
        	  }   	  
          }catch(SQLException e){
           	 e.printStackTrace();
        	 }
     
       }
    Requete :

    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
    public class Requete {
     
    	ResultSet resultat=null; 
    	Statement statement;
     
    	 public  Requete(Connection conn,String req,int a){
     
    		try {					   
    			  statement= conn.createStatement();
    			  if(a==1) 
    			  resultat=statement.executeQuery(req);
    			  else if(a==2)
    			  statement.executeUpdate(req);
     
    		    } catch(SQLException e) { 
    		    	  e.printStackTrace(); 
    	    	 } 	
     
    		}
    }
    et j'ai trouvé dans la FAQ de JDBC des méthodes qui seront la solution pour

    mon problème ,

    http://java.developpez.com/faq/jdbc/?page=resultset

    donc j'ai fait ces modifications :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // pour faire resultat.resultat.last(); je dois changer le type de ResultSet
     
    // de la classe Requete par  : statement= conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
     
     
       // donc à la place de while j'ai fait ceci :
      resultat.resultat.last();
      PJ=resultat.resultat.getDouble(1);  
      PC=resultat.resultat.getDouble(2);  
      LJ=resultat.resultat.getDouble(3);  
      LC=resultat.resultat.getDouble(4);

    mais un message d'erreur dû au
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    statement= conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    est affiché:

    Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Row index out of range

  6. #6
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    L'exception indique que tu tentes de récupérer une ligne dont l'index est plus grand que la taille du tableau, resultSet ou List. Sans la trace complète, on ne peut pas te dire à quelle ligne est l'erreur.

  7. #7
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Points : 88
    Points
    88
    Par défaut
    merci CheryBen,

    j'ai dit que l'erreur est dû lorsque je remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    statement= conn.createStatement();
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    statement= conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

  8. #8
    Membre éprouvé Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Points : 934
    Points
    934
    Par défaut
    Assure-toi que le ResultSet n'est pas vide...

  9. #9
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Citation Envoyé par ouchemhou Voir le message
    merci CheryBen,

    j'ai dit que l'erreur est dû lorsque je remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    statement= conn.createStatement();
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    statement= conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    L'erreur n'est pas du au fait que tu remplaces telle chose par telle chose.

    Le problème vient de ce que j'ai dit plus haut. Si tu nous donnait la trace de l'erreur complète, ce serait plus simple.

  10. #10
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Points : 88
    Points
    88
    Par défaut
    Bonjour,

    merci beaucoup fraco et CheryBen

    vos réponses sont trés efficaces ,

    pour CheryBen : voilà la trace :

    Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Row index out of range
    at javax.swing.JTable.boundRow(JTable.java:2049)
    at javax.swing.JTable.setRowSelectionInterval(JTable.java:2072)
    at table.<init>(table.java:26)
    at TableRapport1.traitement(TableRapport1.java:108)
    at TableRapport1.<init>(TableRapport1.java:38)
    at impression.Rapport(impression.java:285)
    at impression.<init>(impression.java:247)
    at OMAG$MenuPrincipale.actionPerformed(OMAG.java:535)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)




    aprés la lecture de toute la trace j'ai constaté que vous avez raison , l'erreur n'est pas produite par

    le remplacement,elle est produite par :


    tablee.setRowSelectionInterval(0, 0); // dans le constrecteur de la table


    et pourqoi!! car le ResultSet est vide donc vous avez raison fraco.


    alors mon nouveau statement :


    statement= conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);


    donc pourquoi mon ResultSet est vide !!? sachant que j'ai pas changé que cette instruction ,


    les boucles sont les memes et les données existe dans la base,


    et si je fait ResultSet.TYPE_FORWARD_ONLY à la place de ResultSet.TYPE_SCROLL_INSENSITIVE

    ça marche !! !

  11. #11
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Même si le ResultSet est vide, l'erreur ne devrait pas arriver, il faut rendre ton code plus robuste pour ne pas chercher à sélectionner une ligne de la JTable si elle est vide. (fait un test sur getRowCount par exemple)

    Sinon j'avoue ne pas connaitre l'intérêt de ResultSet.TYPE_SCROLL_INSENSITIVE même après lecture de la javadoc. A quoi cela sert-il?

  12. #12
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Citation Envoyé par CheryBen Voir le message
    Sinon j'avoue ne pas connaitre l'intérêt de ResultSet.TYPE_SCROLL_INSENSITIVE même après lecture de la javadoc. A quoi cela sert-il?
    Il me semble que c'est pour autoriser le parcours du ResultSet dans n'importe quel sens. en avant, en arrière ...

    Par exemple dans la FAQ, Comment connaître le nombre de lignes/colonnes d'un ResultSet ?, c'est nécessaire ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  13. #13
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Points : 88
    Points
    88
    Par défaut
    salut ,

    merci in pour votre intervention,

    en fait ResultSet.TYPE_SCROLL_INSENSITIVE : Cette valeur indique que le curseur peut être déplacé dans les deux sens, mais aussi arbitrairement (de manière absolue ou relative).

    et moi j'ai besoin de ça pour deplacer le curseur directement vers le denier element:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      //  à la place de while je dois faire ceci :
    
      resultat.resultat.last();
      PJ=resultat.resultat.getDouble(1);  
      PC=resultat.resultat.getDouble(2);  
      LJ=resultat.resultat.getDouble(3);  
      LC=resultat.resultat.getDouble(4);

    pour le getRowCount me renvoi 0.

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/05/2013, 16h49
  2. Connaitre le dernier élément de mysql_fetch_array
    Par H-bil dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 12/06/2006, 15h06
  3. Comment acceder au dernier enregistrement crée?
    Par Fredri dans le forum Access
    Réponses: 1
    Dernier message: 26/12/2005, 17h24
  4. N dernier elements
    Par breynard dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 05/12/2005, 09h56
  5. selectionner le dernier element d'une liste box
    Par adilou1981 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/03/2005, 10h19

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