[Java] Exception lancée alors que ça devrais passer !

Exception lancée alors que ça devrais passer ! [Java] - Programmation

Marsh Posté le 17-06-2002 à 11:31:51    

J'comprend pas...
Je fais le truc suivant:

Code :
  1. ResultSet rs = stmt.executeQuery (sqlQuery);
  2. // sqlQuery contient : select * from UTILISATEURS where (UTIL=\`MC\`)
  3. // Si aucun enregistrement n'a été trouvé
  4. if (!rs.next ())
  5.    return false;
  6. String loginFromTable = rs.getString (1); // Lance une exception (de même pour rs.getString ("UTIL" );


Qqn voit ce qu'il se passe ?
(je suis sur qu'il existe dans ma table, un enregistrement où UTIL est à "MC"...)


Message édité par El_gringo le 17-06-2002 à 11:32:20
Reply

Marsh Posté le 17-06-2002 à 11:31:51   

Reply

Marsh Posté le 17-06-2002 à 11:33:06    

bah kesk'elle dit ton exception?

Reply

Marsh Posté le 17-06-2002 à 11:34:48    

C'est quoi l'exception. Tu te boolayétise? :heink:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-06-2002 à 11:39:54    

aaaah, lala....La boulayétisation du lundi matin, quelque part, je comprends un peu, Dark, sois indulgent! :D:D

Reply

Marsh Posté le 17-06-2002 à 11:40:29    

2 secondes, je suis en train de voir un truc.
En fait, je gère mal mes exception; ça fait que je récupérais pas la SQL Exception, d'ou, une message d'erreur pas explicite.
Mais là, je viens de voir la SQLExecption que me rend le getString(1);
SQLState : S1002
Message  : Index de descripteur non valide
ça veut dire quoi ça !?


Message édité par El_gringo le 17-06-2002 à 11:40:44
Reply

Marsh Posté le 17-06-2002 à 11:42:58    

Montre tout le code qui gère la query + vérifie le contenu de ta DB + verfie tes fichiers de conf pour te loguer à la bd


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-06-2002 à 11:44:21    

c koi la strcuture de ta première colonne? Si c'est pas une string ou équivalent c'est normal ...


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-06-2002 à 11:48:51    

Tout de suite monsieur Dark :
Dans ma classe:

Code :
  1. // Nom de la table
  2.     private static final String TABLE_USERS          = "UTILISATEURS";
  3.     private static final String ROW_UTIL       = "UTIL";


Dans une méthode:

Code :
  1. String sqlQuery = "select * from " + TABLE_USERS + " where (" + ROW_UTIL + "='" + this.login + "')";       
  2.         try {
  3.             java.sql.Statement stmt = con.createStatement ();
  4.             ResultSet rs = stmt.executeQuery (sqlQuery);
  5.             if (!rs.next () && !rs.isFirst ())
  6.                 return false;
  7.            
  8.             // Si le mot de passe entré ne correspond pas à celui dans la base de donnée             
  9.             if (!initFromResultSet (rs))
  10.                 return false;
  11.             this.isLoaded = true;
  12.             stmt.close ();
  13.         }
  14.         catch (SQLException e) {
  15.             throw new JLdsDataException ("Une erreur est survenue lors de l'execution/lecture des résultats, de la requète :\n\t" + sqlQuery, e);
  16.         }


Méthode initFromResultSet:

Code :
  1. private boolean initFromResultSet (ResultSet rs) throws SQLException, JLdsServletException {
  2.         String loginFromTable = rs.getString (1);
  3.         String pwdFromTable   = rs.getString (2);
  4.         String nameFromTable  = rs.getString (3);
  5.         String cptFromTable   = rs.getString (4);
  6.         String configFromTable= rs.getString (5);
  7.         //et d'autres trucs......
  8.         return true;
  9. }


 
Quand j'execute dans un analyseur SQL, la requête:
select * from UTILISATEURS where (UTIL='MC';);
ça me rend bien mon enregistrement.
 
Quand, par mon prog, je remplace le contenu de sqlQuery, pour y mettre : "select * from UTILISATEURS"
le getString(1); passe sans pb, donc ma connection est OK !


Message édité par El_gringo le 17-06-2002 à 11:52:51
Reply

Marsh Posté le 17-06-2002 à 11:51:39    

lorsque tu fais rs.next() pour la première fois, si ca te retourne true ce sera TOUJOURS le premier élément (inutile de faire isFirst())
 
Tu as l'exception sur quelle ligne?
 
Ouvre MySQL ou SQLPlus ou je sais pas quoi et lance la query a la mano pour voir le résultat
 
arrête de m'appeler monsieur :D


Message édité par darklord le 17-06-2002 à 11:52:00

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-06-2002 à 11:54:24    

DarkLord a écrit a écrit :

lorsque tu fais rs.next() pour la première fois, si ca te retourne true ce sera TOUJOURS le premier élément (inutile de faire isFirst())
 
Tu as l'exception sur quelle ligne?
 
Ouvre MySQL ou SQLPlus ou je sais pas quoi et lance la query a la mano pour voir le résultat
 
arrête de m'appeler monsieur :D  




 
J'ai édité mon, message: g déja exécuté à la main ! c ok.
(pour le isFirst, je m'en doutais, ms ça coute rien. Enfin, maintenant que je suis sur, je l'enlève !)

Reply

Marsh Posté le 17-06-2002 à 11:54:24   

Reply

Marsh Posté le 17-06-2002 à 11:56:43    

DarkLord a écrit a écrit :

lorsque tu fais rs.next() pour la première fois, si ca te retourne true ce sera TOUJOURS le premier élément (inutile de faire isFirst())
 
Tu as l'exception sur quelle ligne?
 
Ouvre MySQL ou SQLPlus ou je sais pas quoi et lance la query a la mano pour voir le résultat
 
arrête de m'appeler monsieur :D  




 
l'exception est dès que j'essaye de récupérer qqch depuis mon ResultSet.
que ça soit un rs.getString(1), un rs.getString("UTIL" ), un getString(2), ou autre, ça merde !
le ResultSet que je récupère depuis mon executeQuery est bisard je crois !

Reply

Marsh Posté le 17-06-2002 à 11:59:48    

balance le script SQL que tu as utilisé pour créer ta table


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-06-2002 à 12:04:31    

DarkLord a écrit a écrit :

balance le script SQL que tu as utilisé pour créer ta table  




 
tout bête:

Code :
  1. create table UTILISATEURS (UTIL varchar(9), PASSWORD varchar(9),NOMUTIL varchar(21),CPT smallint,CONFIG varchar(3));


Message édité par El_gringo le 17-06-2002 à 12:04:41
Reply

Marsh Posté le 17-06-2002 à 12:05:31    

si tu peux mettre des () là. De toutes façons il a fait la query a la mano et ca a renvoyé le bon résultat
 
enfin c'est ce qu'il dit :)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-06-2002 à 12:05:46    

greg@freestarthu a écrit a écrit :

je suis pas convaincu que les () soit correctes là:
select * from UTILISATEURS where (UTIL='MC');
 
?  




 
ça passe dans l'interpréteur SQL de SQLServer, et j'ai déja essayé sans...

Reply

Marsh Posté le 17-06-2002 à 12:05:57    

greg -> Ignoble fanfaront tu as effacé ton post?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-06-2002 à 12:06:16    

oh le petit vilain  [:tapai]


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-06-2002 à 12:06:39    

DarkLord a écrit a écrit :

si tu peux mettre des () là. De toutes façons il a fait la query a la mano et ca a renvoyé le bon résultat
 
enfin c'est ce qu'il dit :)  




 
ha, non, commences pas !
Je suis pas un noeu-noeud. Je sais faire une requête SQL !

Reply

Marsh Posté le 17-06-2002 à 12:06:49    

DarkLord a écrit a écrit :

greg -> Ignoble fanfaront tu as effacé ton post?  



oué je me suis rendu compte de la connerie de ce que je disais:)

Reply

Marsh Posté le 17-06-2002 à 12:07:30    

par contre déjà je mettrai pas le *, je specifierai les colonnes dans la requete
mais bon ça n'a rien à voir non plus :)

Reply

Marsh Posté le 17-06-2002 à 12:07:33    

DarkLord a écrit a écrit :

greg -> Ignoble fanfaront tu as effacé ton post?  




 
m'en fout, je l'ai serré qd même ! il est gravé dans ma réponse à son post ! :D

Reply

Marsh Posté le 17-06-2002 à 12:07:50    

greg@freestarthu a écrit a écrit :

par contre déjà je mettrai pas le *, je specifierai les colonnes dans la requete
mais bon ça n'a rien à voir non plus :)  




 
pourquoi !? vu que je veux toutes les colones, pourquoi m'emmerder à tt taper !?


Message édité par El_gringo le 17-06-2002 à 12:08:17
Reply

Marsh Posté le 17-06-2002 à 12:09:09    

el_gringo a écrit a écrit :

 
 
pourquoi !? vu que je veux toutes les colones, pourquoi m'emmerder à tt taper !?  



pour etre sur de les avoir dans le bon ordre pardi
(surtout que tu fais des getString(i) ...)

Reply

Marsh Posté le 17-06-2002 à 12:12:31    

greg@freestarthu a écrit a écrit :

pour etre sur de les avoir dans le bon ordre pardi
(surtout que tu fais des getString(i) ...)  




 
 :jap:  :jap:  :jap:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-06-2002 à 12:13:17    

greg@freestarthu a écrit a écrit :

pour etre sur de les avoir dans le bon ordre pardi
(surtout que tu fais des getString(i) ...)  




 
T'as raison, c'est fait !
Par contre, ça n'arrange pas mon problème !  :(

Reply

Marsh Posté le 17-06-2002 à 12:16:07    

envoie un peu la stacktrace stp


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-06-2002 à 12:24:05    

DarkLord a écrit a écrit :

envoie un peu la stacktrace stp  




 
la stack trace de l'execution de mon prog ? Je la trouve ds netbean ? (j'utilise jammais ça, ça sert à quoi !??)

Reply

Marsh Posté le 17-06-2002 à 12:25:34    

dans ton catch machin chose là tu ajoute
 
e.printStackTrace();
 
et tu copy-paste ce que la console recrache à l'exécution


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-06-2002 à 12:25:58    

DarkLord a écrit a écrit :

dans ton catch machin chose là tu ajoute
 
e.printStackTrace();
 
et tu copy-paste ce que la console recrache à l'exécution  




 
avant de faire ton throw machin chose


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-06-2002 à 12:30:21    

ça !?

Code :
  1. java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]Index de descripteur non valide
  2.         at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6106)
  3.         at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:6263)
  4.         at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3307)
  5.         at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5494)
  6.         at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:342)
  7.         at com.damaris.database.Utilisateur.initFromResultSet(Utilisateur.java:195)
  8.         at com.damaris.database.Utilisateur.getDataFromTable(Utilisateur.java:182)
  9.         at com.damaris.ldsweb.JLdsWeb.attachVisiteur(JLdsWeb.java:174)
  10.         at com.damaris.ldsweb.JLdsWeb.processRequest(JLdsWeb.java:80)
  11.         at com.damaris.ldsweb.JLdsWeb.doPost(JLdsWeb.java:135)
  12.         at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
  13.         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
  14.         at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:404)
  15.         at org.apache.tomcat.core.Handler.service(Handler.java:286)
  16.         at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
  17.         at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:797)
  18.         at org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
  19.         at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:210)
  20.         at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
  21.         at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:498)
  22.         at java.lang.Thread.run(Thread.java:536)


 
ça peut t'être utile !?

Reply

Marsh Posté le 17-06-2002 à 12:32:10    

el_gringo a écrit a écrit :

ça !?  
ça peut t'être utile !?  




ben oui :))

Reply

Marsh Posté le 17-06-2002 à 13:35:15    

y a quoi a la ligne 195 de ton code?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-06-2002 à 13:37:11    

el_gringo a écrit a écrit :

ça !?
ça peut t'être utile !?  




 
Je trouve que tu poses des questions vraiment bizarres parfois. Oui c'est utile, surtout qd t'as un problème (en tout cas moi c'est la première chose que je regarde.


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-06-2002 à 14:00:30    

DarkLord a écrit a écrit :

 
 
Je trouve que tu poses des questions vraiment bizarres parfois. Oui c'est utile, surtout qd t'as un problème (en tout cas moi c'est la première chose que je regarde.  




 
Bah, je dis ça parce que les seuls renseignements qui me paraissent utiles la dedant, je vous les avaient déja donnés, à savoir:
le message de l'exception : Index de descripteur non valide  
le moment ou ça se passe : au premier getString de mon ResultSet (ligne 195)

Reply

Marsh Posté le 17-06-2002 à 14:15:41    

Citation :

What is an Invalid Descriptor Index?  
This error is caused by permission violations, an attempt to access a blob field on the SQL server with an ODBC driver, or an attempt to access long records with decimal/numeric data.

(http://www.tconsult.com/developer/descriptor.asp)

Reply

Marsh Posté le 17-06-2002 à 14:37:12    

essaie de remplacer tes getString() par getObject()


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-06-2002 à 14:38:40    

DarkLord a écrit a écrit :

essaie de remplacer tes getString() par getObject()  




 
marche seulement avec un driver jdbc 2.0 compliant

Reply

Marsh Posté le 17-06-2002 à 14:39:47    

HappyHarry a écrit a écrit :

 
 
marche seulement avec un driver jdbc 2.0 compliant  




 
'faut que je reste compatible avec un maximum de drivers.

Reply

Marsh Posté le 17-06-2002 à 14:40:22    

greg@freestarthu a écrit a écrit :

Citation :

What is an Invalid Descriptor Index?  
This error is caused by permission violations, an attempt to access a blob field on the SQL server with an ODBC driver, or an attempt to access long records with decimal/numeric data.

(http://www.tconsult.com/developer/descriptor.asp)  




 
Merci. J'y ai cru un moment, ms ça ne venait pas de ça.

Reply

Marsh Posté le 17-06-2002 à 14:44:06    

ça y est, ça marche.
Vous allez pas me croire tellement c bisard. Moi même g vachement du mal à y croire, ms maintenant, c sur. Je vous jure, je suis pas trop du genre à affirmer qqch, sans avoir vérifié 50 fois.
Quand mon ResultSet s'appel "rs" , ça merde.
Si je l'appel autrement ("res" ), que je recompile, et que je relance, ça marche !!!
Qqn y comprend qqch !??

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed