Enregistrement precedent

dmo83 Messages postés 79 Date d'inscription vendredi 19 août 2011 Statut Membre Dernière intervention 11 octobre 2011 - 3 oct. 2011 à 20:45
dmo83 Messages postés 79 Date d'inscription vendredi 19 août 2011 Statut Membre Dernière intervention 11 octobre 2011 - 4 oct. 2011 à 20:30


bonsoir ce code permet a un utilisateur de se déplacer a un enregistrement précédent mais n'affiche aucun resultat ou se trouve le probleme
mon code:

public void jprecedent()throws Exception{
/*String pref=null;String pdesignation=null; double pprix=0;
pref=jref.getText();
pdesignation=jdesigne.getText();
pprix=Double.parseDouble(jprix.getText());*/ String jref,jdesigne; double jprix;
/*if(conn==null){*/
try{
Class.forName("org.gjt.mm.mysql.Driver");
Class.forName("com.mysql.jdbc.Driver");

String url="jdbc:mysql://localhost/bd_produit?";
conn=DriverManager.getConnection(url,"root","mebf2011$");

st= conn.createStatement();
String requete="select * from produit";
rs=st.executeQuery(requete);
rs.afterLast();

while(rs.previous()){
/* System.out.println( rs.getString("ref"));
System.out.println(rs.getString("designation"));
System.out.println(rs.getDouble("prix"));*/
jref=rs.getString("ref");
jdesigne=rs.getString("designation");
jprix=rs.getDouble("prix");

System.out.println(jref);
System.out.println(jdesigne);
System.out.println(jprix);

/*jref.setText(rs.getString("ref"));
jdesigne.setText(rs.getString("designation"));
jprix.setText(Double.toString(rs.getDouble("prix")) );
System.out.println();*/
}
// rs.close();

}
catch(SQLException ex){
JOptionPane.showMessageDialog(null,"anomalie lors de l'execution de la requete","Erreur",JOptionPane.ERROR_MESSAGE);
}

finally{
if(st!=null){
try{
st.close();
}
catch(SQLException ex){
ex.printStackTrace();
}
}
if(rs!=null){
try{
rs.close();
}
catch(SQLException ex){
ex.printStackTrace();
}
}
if(conn!=null){
try{
conn.close();
}
catch(SQLException ex){
ex.printStackTrace();
}
}


}

}
bigboss

13 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
4 oct. 2011 à 09:10
Bonjour,

Es tu certain que ta resultset contient un enregistrement ? Le code qui sert à parcourir les enregistrements du dernier au premier a l'air correct.

Par contre, il faut savoir que le afterNext ne lève pas d'exception si la resultset est vide. Tu peux essayer de placer avant ton afterNext() ceci :
if(res.next()){
   System.out.println("non vide");
}
else{
   System.out.println("vide");
}


Avec ce code, tu sauras si ta resultset est vide ou non
0
dmo83 Messages postés 79 Date d'inscription vendredi 19 août 2011 Statut Membre Dernière intervention 11 octobre 2011
4 oct. 2011 à 09:48
bonjour,avec mon code insertion j'arrive a enregistrer des données dans ma base de données donc mon resulset n'est pas vide

bigboss
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
4 oct. 2011 à 10:53
As tu fais un COMMIT après l'insertion ? L'as tu fait avec java ? Je dirais que non et je pense que ta table doit bel et bien être vide.

As tu testé d'insérer le code que je t'ai donné ? Ca ne te prendra qu'une seconde ...
0
dmo83 Messages postés 79 Date d'inscription vendredi 19 août 2011 Statut Membre Dernière intervention 11 octobre 2011
4 oct. 2011 à 12:32
au fait j'arrive a obtenir le resultat de la recherche en saisant la reference du produit ça prouve que ma table n'est pas vide peut être que pour obtenir le resultat des enregistrements précédent/suivant je dois parcourir la longueur de ma table si oui suis je obligé d'instancier ma table?

bigboss
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dmo83 Messages postés 79 Date d'inscription vendredi 19 août 2011 Statut Membre Dernière intervention 11 octobre 2011
4 oct. 2011 à 12:37
il affiche que l'enregistrement précédent le plus reçent


bigboss
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
4 oct. 2011 à 13:37
Vu ton message précédent de toute facon, c'était ok sur ce point là.

Je ne vois pas ce qui peut poser problème...
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
4 oct. 2011 à 13:38
Et quand tu dé-commentes ces lignes :

/* System.out.println( rs.getString("ref"));
System.out.println(rs.getString("designation"));
System.out.println(rs.getDouble("prix"));*/ 


Ca marche non ? Les rs.getString("ref") sont bien affichés ?
0
dmo83 Messages postés 79 Date d'inscription vendredi 19 août 2011 Statut Membre Dernière intervention 11 octobre 2011
4 oct. 2011 à 14:25
non ca ne marche pas avec celui la mais avec
jref.setText(rs.getString("ref"));
jdesigne.setText(rs.getString("designation"));
jprix.setText(Double.toString(rs.getDouble("prix")));
seulement il m'affiche un seul resultat hors il doit parcourir la table et affiche les resultat de chaque enregistrement precedent tant que l'utilisateur le demande
bigboss
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
4 oct. 2011 à 14:38
Alors ton problème dans ce cas précis est un problème de référence, si tu remplaces ceci :

while(rs.previous()){
/* System.out.println( rs.getString("ref"));
System.out.println(rs.getString("designation"));
System.out.println(rs.getDouble("prix"));*/
jref=rs.getString("ref");
jdesigne=rs.getString("designation");
jprix=rs.getDouble("prix");

System.out.println(jref);
System.out.println(jdesigne);
System.out.println(jprix); 


par celà

while(rs.previous()){
/* System.out.println( rs.getString("ref"));
System.out.println(rs.getString("designation"));
System.out.println(rs.getDouble("prix"));*/
String jref=rs.getString("ref");
String jdesigne=rs.getString("designation");
String jprix=rs.getDouble("prix");

System.out.println(jref);
System.out.println(jdesigne);
System.out.println(jprix); 


Ton programme affichera tous les résultats en commençant par la fin.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
4 oct. 2011 à 14:40
Pour ce qui concerne l'affichage d'un nouveau résultat lorsque l'utilisateur le demande, ce n'est pas ce que tu as codé.

Si tu fais celà, tu auras toujours le dernier enregistrement dans tes champs textes. Pour t'en sortir, il va falloir que tu codes ce fonctionnement un peu lourd en essayant de ne pas réinterroger la base de données à tous les coups.

Bon courage
0
dmo83 Messages postés 79 Date d'inscription vendredi 19 août 2011 Statut Membre Dernière intervention 11 octobre 2011
4 oct. 2011 à 19:29
j'essaie avec cette méthode mes elle ne sert qu'afficher le numéro de ligne
comment parcourir la table afin que le résultat qui sera affiché donne le nom des enregistrements et non le numéro des colonnes
mon code:

//parcourt et affiche le libéllé

try{
ResultSetMetaData rsmd=rs.getMetaData();
int nbcols=rsmd.getColumnCount();
rs.beforeFirst();
while(rs.next()){
for(int i=1;i<=nbcols;i++)
System.out.println(rs.getString(i)+" ");


}
}
bigboss
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
4 oct. 2011 à 19:41
Je ne comprend pas bien, rs.getString() te retourne le contenu de la colonne pas son numéro ???
0
dmo83 Messages postés 79 Date d'inscription vendredi 19 août 2011 Statut Membre Dernière intervention 11 octobre 2011
4 oct. 2011 à 20:30
j'essaie avec la boucle if qui parcourt ma table selon le nombre d'enregistrement qui existe et que l'utilisateur puisse passer d'un enregistrement à un autre mais en utilisant simplement int nbcols=rsmd.getColumnCount() a l'affichage on aura du numerique ie le numéro de chaque colonne alors moi je veux que l'utilisateur voit afficher exactement que ce qui est enrégistré dans la table il ya le columNames(int colum) mais je ne m'en sort pas
en voici :


try{
ResultSetMetaData rsmd=rs.getMetaData();
int nbcols=rsmd.getColumnCount();
rs.beforeFirst();
while(rs.next()){
for(int i=0;i<=nbcols;i++){
String nomcols=rsmd.getColumnName(i);
// System.out.println(" "+i+"");

}



}
}

bigboss
0