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.
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.
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)
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?
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.
Bonjour merci pour vous réponses.
je travaille actuelement avec ce code :
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 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(); } }
et j'ai trouvé dans la FAQ de JDBC des méthodes qui seront la solution pour
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(); } } }
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û auest affiché:
Code : Sélectionner tout - Visualiser dans une fenêtre à part statement= conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Row index out of range
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.
Les composants SWING | Les layouts SWING | doc javase 6 | CORBA | XSLT | BDD Derby embarquée
Pensez au bouton une fois le problème résolu
Comment utiliser la fameuse balise CODE ?
merci CheryBen,
j'ai dit que l'erreur est dû lorsque je remplace :
par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part statement= conn.createStatement();
Code : Sélectionner tout - Visualiser dans une fenêtre à part statement= conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
Assure-toi que le ResultSet n'est pas vide...
Les composants SWING | Les layouts SWING | doc javase 6 | CORBA | XSLT | BDD Derby embarquée
Pensez au bouton une fois le problème résolu
Comment utiliser la fameuse balise CODE ?
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 !! !
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?
Les composants SWING | Les layouts SWING | doc javase 6 | CORBA | XSLT | BDD Derby embarquée
Pensez au bouton une fois le problème résolu
Comment utiliser la fameuse balise CODE ?
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/
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager