je ne comprends pas ce que signifie cette erreur :o[Microsoft][Gestionnaire de pilotes ODBC] État de curseur non valide, code: 0, State: 24000
je ne comprends pas ce que signifie cette erreur :o[Microsoft][Gestionnaire de pilotes ODBC] État de curseur non valide, code: 0, State: 24000
voila le code ou ca bug
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 public void propertyChange(PropertyChangeEvent e) { DateButton db = (DateButton) e.getSource(); if (db == startDateButton) { startDate = db.getDate(); System.out.print("Start date changed: "); } else { System.out.print("End date changed: "); endDate = db.getDate(); } System.out.println(db.getDate()); abonnement = new Abonnement(startDate, endDate); requetesAbonnement.insertAbonnement(abonnement); }
A priori, avec une erreur pilote ODBC, c'est sur un probleme de requete que ca se passe...
Code : Sélectionner tout - Visualiser dans une fenêtre à part requetesAbonnement.insertAbonnement(abonnement);
A mon avis, ca doit se passer au niveau de cette ligne, je vois pas ou tu pourrais faire intervenir une base de données ailleurs...
Maintenant, tu fais quoi dans ton requetesAbonnement ?
Ta connexion est proprement ouverte ?
requetesAbonnements est mon objet qui contient les requetes pour les abonnements
Justement : ton erreur viens de la base de données, donc l'erreur doit provenir d'une de tes méthodes qui utilisent la base de données (surement la méthode insertAbonnement() comme l'indique ghorgor)...Envoyé par Hydre
Donc c'est ce code là qu'il faut nous montrer... Le code que tu nous montre se contente de faire de l'affichage et de récupérer des valeurs mais ne correspond pas à ton erreur !!!
En même temps le stacktrace de l'exception devrait te donner la ligne de l'erreur dans ta méthode... ce serait bien de nous la donner en même temps...
En général ce type d'erreur peut survenir si on effectue des next() en trop sur le ResultSet...
a++
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
27
28
29
30
31
32
33
34
35
36
37
38
39 public int insertAbonnement(Abonnement abt) { int idxRet = -1; String sql = "INSERT INTO t_abonnement (abt_dateDebut, abt_dateFin, abt_enCours, abt_depot, abt_prix) " + "VALUES ('" + abt.getAbt_dateDebut() + "', '" + abt.getAbt_dateFin() + "', '" + abt.getAbt_enCours() + "', '" + abt.getAbt_Depot() + "', '" + abt.getAbt_prix() + "')"; int nbrRec = dbc.executeSQL(sql); if (nbrRec == 1) { // recherche de l'index String rsql = "SELECT abt_id FROM t_abonnement WHERE abt_dateDebut = '" + abt.getAbt_dateDebut() + "' AND abt_dateFin = '" + abt.getAbt_dateFin() + "' AND abt_enCours = '" + abt.getAbt_enCours() + "' AND abt_depot = '" + abt.getAbt_Depot() + "' AND abt_prix = '" + abt.getAbt_prix() + "'"; ResultSet rs = dbc.createResultSet(rsql); try { if (rs != null) { rs.next(); idxRet = rs.getInt(1); } } catch (SQLException se) { dbc.showListSqlExceptions(se); } try { if (rs != null) { rs.close(); } } catch (SQLException se) { dbc.showListSqlExceptions(se); } } return idxRet; }
j'ai utilisé le meme genre de requetes pour d'autres choses et ca marche
Ce n'est pas parce que ca marche dans un cas que le code est forcément sans erreur...Envoyé par Hydre
Le problème semble venir de là :
Tu appelles rs.next() sans vérifier sa valeur... Et si la requête est vide tu n'as pas le droit de récupérer des éléments depuis le ResultSet (puisqu'il n'y en as pas).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if (rs != null) { rs.next(); idxRet = rs.getInt(1); }
Il faut donc obligatoirement vérifier la valeur de retour de next() :
a++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if (rs != null) { if (rs.next()) { idxRet = rs.getInt(1); } }
PS : je ne sais pas ce que fait la méthode showListSqlExceptions() mais il est utile de toujours faire un printStackTrace() pour savoir d'où vient l'erreur... en particulier lorsqu'on débugge...
merci bien
Meme pas le temps de faire une pause clope, il y a un Adiguba qui a fait tout le boulot... Pas juste !!!
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