Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1384 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [JSP/DB2] Problème avec une requête d'insertion - Résolu

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JSP/DB2] Problème avec une requête d'insertion - Résolu

n°1365349
tigrou_bis
Boing... Boing...
Posté le 12-05-2006 à 17:33:58  profilanswer
 

Bonjour,
 
je travaille actuellement sur un outil développé uniquement en JSP, avec des tags JSTL (oui, je sais, c'est pas propre et c'est pas fait pour, mais j'ai pas le choix : je voulais du PHP, on me l'a refusé et on m'a donné ça à la place).
 
J'ai un problème avec une requête d'insertion, dans une base DB2.
 
Voici le code qui me pose problème :

Code :
  1. <sql:update dataSource="jdbc/chrono" var="resultInsertNiv10"
  2. sql="insert into tache (id_macro, ta_ordre, ta_niveau, ta_debut,
  3. ta_fin, id_bascule, ta_libelle, ta_jalon, id_chrono, id_ressource_resp, ta_pa_resp,
  4. id_application, ta_flag) values (?, ?+1, 1, ?, ?, 1, ?, ?, ?, ?, 'P', ?, 1)">
  5. <sql:param value="${macro}" />
  6. <sql:param value="${ordre}" />
  7. <sql:param value="${param.debut}" />
  8. <sql:param value="${param.fin}" />
  9. <sql:param value="${param.libelle}" />
  10. <sql:param value="${jalon}" />
  11. <sql:param value="${param.id_chrono}" />
  12. <sql:param value="${param.resp}" />
  13. <sql:param value="${param.appli}" />
  14. </sql:update>


 
J'obtiens un retour d'erreur de ma base de données, sous cette forme :

Code :
  1. insert into tache (id_macro, ta_ordre, ta_niveau, ta_debut, ta_fin, id_bascule, ta_libelle,
  2. ta_jalon, id_chrono, id_ressource_resp, ta_pa_resp, id_application, ta_flag) values (?, ?+1, 1,
  3. ?, ?, 1, ?, ?, ?, ?, 'P', ?, 1): String index out of range: 5


 
Je ne comprends pas, je n'arrive pas à reproduire l'erreur, quand je fais une requête similaire, en direct dans ma BDD, pas de problème, et quand je le mets dans mon fichier JSP, paf ! Mon chef me suggère de récupérer, par un moyen ou un autre, le texte de la requête qui est réellement envoyé à la BDD, mais je ne sais pas faire.
 
Quelqu'un a-t-il déjà eu cette situation ? Peut m'aider ? A une idée sur la façon de récupérer le texte strict de la requête susceptible de foirer ? Merci d'avance !
 
 
Solution (25/05/06) : après exploitation des différents messages d'erreurs (le plus dur fut de récupérer le message d'erreur original, et pas encapsulé dans des tags JSP), il s'est avéré que le driver JDBC de mon serveur était différent de celui du serveur de prod. Du coup, j'avais deux champs timestamp dans ma table, que je remplissais avec des données de la forme 'hh:mm'. Eh bien, avec l'autre driver, il fallait lui donner la forme 'hh:mm:ss'. D'où le message "String index out of range", le serveur cherchait la suite du paramètre à passer...
 
Voilà. Merci à tous ceux qui m'ont répondu ! Et si ça peut aider qqn qui a le même genre d'erreur...

Message cité 1 fois
Message édité par tigrou_bis le 02-06-2006 à 14:07:25
mood
Publicité
Posté le 12-05-2006 à 17:33:58  profilanswer
 

n°1365351
anapajari
s/travail/glanding on hfr/gs;
Posté le 12-05-2006 à 17:39:54  profilanswer
 

pour monitorer db2 tu peux te servir du script fourni la: http://www-128.ibm.com/developerwo [...] /#listing5
 
Au moins tu auras exactement la requête executée par DB2

n°1365357
tigrou_bis
Boing... Boing...
Posté le 12-05-2006 à 17:48:40  profilanswer
 

anapajari a écrit :

pour monitorer db2 tu peux te servir du script fourni la: http://www-128.ibm.com/developerwo [...] /#listing5
 
Au moins tu auras exactement la requête executée par DB2

Merci pour le lien. Je n'ai pas accès directement à cette base, car c'est une base de prod, je ne peux pas toucher au serveur. Mais je peux toujours voir avec mon admin s'il est d'accord pour me monitorer ça :p

n°1365673
moonboot
Posté le 13-05-2006 à 18:44:14  profilanswer
 

tu ne peux pas sortir ta requête une fois qu'elle est bindée dans un fichier pour voir quelle tête elle a  ?
 
A mon avis tu dois avoir un problème de paramètre qui n'est pas correctement renseigné (voir plusieurs vu le nombre de ?)

n°1366165
tigrou_bis
Boing... Boing...
Posté le 15-05-2006 à 09:05:46  profilanswer
 

moonboot a écrit :

tu ne peux pas sortir ta requête une fois qu'elle est bindée dans un fichier pour voir quelle tête elle a  ?

Le problème est qu'en JSP, il n'y a pas de mode débug, et je n'ai pas (à ma connaissance) de fichier de log qui me permette de voir la requête telle qu'elle est envoyée à la BDD.
 

moonboot a écrit :

A mon avis tu dois avoir un problème de paramètre qui n'est pas correctement renseigné (voir plusieurs vu le nombre de ?)

Je ne pense pas. Ce que j'ai omis de dire, c'est que ce bout de code fonctionne parfaitement sur mon serveur de test (WSAD sous Windows, sur mon poste), mais pas sur mon serveur de prod (Serveur Unix). Les deux serveurs sont "branchés" sur la même BDD (DB2 Unix).

n°1366417
moonboot
Posté le 15-05-2006 à 13:41:10  profilanswer
 

Il doit y avoir une log que tu dois pouvoir mettre en route sur le client DB2 de ton serveur.  
Géneralement, il y a un fichier de paramétrage du client à modifier pour que la log trace les ordres envoyées à la base.

n°1366424
moonboot
Posté le 15-05-2006 à 13:43:35  profilanswer
 

j'y pense pourquoi ne pas afficher directement dans ta jsp, l'ordre sql bindé, c'est possible ca dans mes souvenirs ?

n°1366596
tigrou_bis
Boing... Boing...
Posté le 15-05-2006 à 15:57:12  profilanswer
 

moonboot a écrit :

j'y pense pourquoi ne pas afficher directement dans ta jsp, l'ordre sql bindé, c'est possible ca dans mes souvenirs ?

J'ai effectivement ça, quand je passe en mode débug sur mon serveur :
variable sql du tag <sql:update> : insert into tache (id_macro, ta_ordre, ta_niveau, ta_debut, ta_fin, id_bascule, ta_libelle, ta_jalon, id_chrono, id_ressource_resp, ta_pa_resp, id_application, ta_flag) values (?, ?+1, 1, ?, ?, 1, ?, ?, ?, ?, 'P', ?, 1)
Tableau de paramètres affectés au tag : [83, 2000, 00:00, 00:00, tutu, 0, 253, A8707229, 256]
 
Mais d'après un collègue, l'erreur serait même avant le passage en base de données... Y'a-t-il une compilation différente sous Windows et sous Unix ?
 

n°1366624
moonboot
Posté le 15-05-2006 à 16:18:36  profilanswer
 

le msg d'erreur java : string index out of range veut dire que tu essaies d'accéder à une valeur d'un tableau hors périmètre non ?
 
sur tes deux environnements ce sont exactement les mm données ?
 

n°1366636
tigrou_bis
Boing... Boing...
Posté le 15-05-2006 à 16:27:24  profilanswer
 

moonboot a écrit :

le msg d'erreur java : string index out of range veut dire que tu essaies d'accéder à une valeur d'un tableau hors périmètre non ?
 
sur tes deux environnements ce sont exactement les mm données ?

Oui, les données sont les mêmes, car j'ai un JDBC vers la même base de données. Je ne vois pas du tout à quel moment, dans mon fichier, je pourrais utiliser un tableau duquel je dépasse les bornes...  :??:  
 
Je crois que je vais demander à mon interlocuteur de refaire une mise en prod en recompilant les fichiers, histoire de voir si ça corrige qqch... Suis un peu désespérée là  :cry:  

mood
Publicité
Posté le 15-05-2006 à 16:27:24  profilanswer
 

n°1366689
moonboot
Posté le 15-05-2006 à 17:06:00  profilanswer
 

tu as d'autres insert du même type qui plante ?
 
si c'est le cas, cela peut venir de ton jdbc en effet...
si ca n'est pas le cas c'est ton code je pense

n°1366726
tigrou_bis
Boing... Boing...
Posté le 15-05-2006 à 17:33:37  profilanswer
 

moonboot a écrit :

tu as d'autres insert du même type qui plante ?
 
si c'est le cas, cela peut venir de ton jdbc en effet...
si ca n'est pas le cas c'est ton code je pense

Eh bien, toutes mes requêtes d'insert qui sont dans ce fichier JSP plantent (j'en ai 6 au total, car 6 cas différents). Par contre, j'ai dans ce même fichier des requêtes d'update, qui elles passent très bien (j'en ai vérifié l'efficacité dans ma BDD).
 
J'ai demandé de l'aide à mon support technique au boulot, on va voir ce que ça donne... Parce que là j'ai passé la journée dessus et vraiment, je sèche :( C'est franchement frustrant de n'avoir rien fait de productif dans une journée comme ça :cry:

n°1366739
moonboot
Posté le 15-05-2006 à 17:39:19  profilanswer
 

je comprends...

n°1366771
tigrou_bis
Boing... Boing...
Posté le 15-05-2006 à 18:03:05  profilanswer
 

En tout cas, merci beaucoup moonboot pour tes réponses ! :jap:

n°1366785
moonboot
Posté le 15-05-2006 à 18:07:36  profilanswer
 

de rien en même temps je t'ai pas trop aidé :/

n°1367174
tigrou_bis
Boing... Boing...
Posté le 16-05-2006 à 09:48:19  profilanswer
 

Certes, mais ça fait plaisir de voir qu'on n'est pas tout seul dans ces cas là ;)
 
Pour mon problème, je ne sais pas comment ça va se régler, peut-être que l'erreur disparaitra d'elle-même à la prochaine livraison ? Enfin j'espère... Je planche maintenant sur l'hypothèse d'une différence de compilation entre serveur Windows et Unix...

n°1368123
tigrou_bis
Boing... Boing...
Posté le 16-05-2006 à 18:41:32  profilanswer
 

J'ai re-livré mon appli, avec des modifs sensées m'aider à trouver d'où vient le bug, et... c'est pire :cry:
Marre :(

n°1368128
the real m​oins moins
Posté le 16-05-2006 à 18:50:40  profilanswer
 

tigrou_bis a écrit :

Je ne comprends pas, je n'arrive pas à reproduire l'erreur, quand je fais une requête similaire, en direct dans ma BDD, pas de problème, et quand je le mets dans mon fichier JSP, paf ! Mon chef me suggère de récupérer, par un moyen ou un autre, le texte de la requête qui est réellement envoyé à la BDD, mais je ne sais pas faire.


normal, vu que ce qui est réellement envoyé à la bdd, dans la majorité des cas, c'est ta requete tel quelle. J'en sais rien pour db2, mais mysql et oracle supportent nativement les requetes préparées. (je m'avance peut etre un poil, disons chuis sur à 90% :whistle:)  
Ca dépend entre autres du driver, aussi.
 
Tu plantes ton débugger là ou il faut et tu vois ce qu'il se passe. (T'as au minimum les sources des tags jstl, si pas celles du driver)
 
Un truc qui me semble pas net, moi, dans ta requete, c'est ton ?+1.
Tu peux aussi la décortiquer et voir quand ça déconne. Le message d'erreur étant plutot explicite: en gros y'a un soucis pour binder un parametre.. comme si ta requete n'en comportait que 4 et que tu en bindais un 5e, ou tu lui passais une chaine trop longue?  
 
Va falloir se sortir les doigts du cul et les mettre dans le camboui, un ptit peu, hein ...

Message cité 1 fois
Message édité par the real moins moins le 16-05-2006 à 18:51:47

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1368136
tigrou_bis
Boing... Boing...
Posté le 16-05-2006 à 18:59:21  profilanswer
 

the real moins moins a écrit :

normal, vu que ce qui est réellement envoyé à la bdd, dans la majorité des cas, c'est ta requete tel quelle. J'en sais rien pour db2, mais mysql et oracle supportent nativement les requetes préparées. (je m'avance peut etre un poil, disons chuis sur à 90% :whistle:)  
Ca dépend entre autres du driver, aussi.

Après tests, ce n'est pas la BDD qui est en cause.
 

the real moins moins a écrit :

Tu plantes ton débugger là ou il faut et tu vois ce qu'il se passe. (T'as au minimum les sources des tags jstl, si pas celles du driver)

J'ai fait ça. Tout passe comme il faut, les paramètres dans le tableau, tout bien.
 

the real moins moins a écrit :

Un truc qui me semble pas net, moi, dans ta requete, c'est ton ?+1.

Ca fonctionne dans d'autres requêtes (requêtes de mise à jour), appelées avant, dans le même fichier. Pourquoi ça ne fonctionnerait pas là ?

the real moins moins a écrit :

Tu peux aussi la décortiquer et voir quand ça déconne. Le message d'erreur étant plutot explicite: en gros y'a un soucis pour binder un parametre.. comme si ta requete n'en comportait que 4 et que tu en bindais un 5e, ou tu lui passais une chaine trop longue?

Certes. Mais pourquoi ça fonctionne, avec les mêmes paramètres, la même chaîne, sur mon environnement de dév et pas sur celui de prod ? Le code JSP est exactement le même. Voilà pourquoi j'ai demandé s'il existait une différence de compilation entre Windows et Unix, pour un même code...
 

the real moins moins a écrit :

Va falloir se sortir les doigts du cul et les mettre dans le camboui, un ptit peu, hein ...

Merci, ça fait plaisir, des commentaires comme ça. :D Le même genre (en plus vulgaire) que ceux que mon chef me sort depuis 3 jours que je bosse sur ce bug... Tu es démasqué ! :p

n°1368139
the real m​oins moins
Posté le 16-05-2006 à 19:00:31  profilanswer
 

(oui enfin ton chef, tu vas lui demander gentiment d'aller apprendre ce qu'est un prepared statement et il reviendra ^^)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1368140
tigrou_bis
Boing... Boing...
Posté le 16-05-2006 à 19:01:59  profilanswer
 

the real moins moins a écrit :

(oui enfin ton chef, tu vas lui demander gentiment d'aller apprendre ce qu'est un prepared statement et il reviendra ^^)

:D il reconnait quand même qu'il n'y connait rien, mais il me donne des conseils, c'est un chef, hein...

n°1368149
the real m​oins moins
Posté le 16-05-2006 à 19:10:04  profilanswer
 

tigrou_bis a écrit :

Certes. Mais pourquoi ça fonctionne, avec les mêmes paramètres, la même chaîne, sur mon environnement de dév et pas sur celui de prod ? Le code JSP est exactement le même. Voilà pourquoi j'ai demandé s'il existait une différence de compilation entre Windows et Unix, pour un même code...


compilation? beuh, à part si t'utilises pas la meme version de tomcat(ou autre?), ou la meme version de jdk, non.
 
je pencherais plutot pour une difference au niveau de la db...


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1368764
tigrou_bis
Boing... Boing...
Posté le 17-05-2006 à 14:34:51  profilanswer
 

Le retour d'erreur complet peut-il aider à trouver la cause du bug ? Personnellement, je ne sais pas déchiffrer les lignes en "at com.ibm. ...", mais si quelqu'un a une idée, je suis preneuse...
 

Code :
  1. javax.servlet.jsp.JspException: insert into tache (id_macro, ta_ordre, ta_niveau, ta_debut, ta_fin,
  2. id_bascule, ta_libelle, ta_jalon, id_chrono, id_ressource_resp, ta_pa_resp, id_application, ta_flag)
  3. values (?, ?+1, 1, ?, ?, 1, ?, ?, ?, ?, 'P', ?, 1): String index out of range: 5
  4. at org.apache.taglibs.standard.tag.common.sql.UpdateTagSupport.doEndTag
  5. (UpdateTagSupport.java:196)
  6. at org.apache.jsp._f_5F_ajout_5F_tache._jspService(_f_5F_ajout_5F_tache.java:1926)
  7. at com.ibm.ws.webcontainer.jsp.runtime.HttpJspBase.service(HttpJspBase.java:89)
  8. at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
  9. at com.ibm.ws.webcontainer.jsp.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:365)
  10. at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.serviceJspFile(JspServlet.java:715)
  11. at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.service(JspServlet.java:813)
  12. at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
  13. at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
  14. at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
  15. at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
  16. at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
  17. at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
  18. at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch
  19. (ValidServletReferenceState.java:42)
  20. at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch
  21. (ServletInstanceReference.java:40)
  22. at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:76)
  23. at com.hsbc.hbfr.mdo.securite.SecurityFilter.doFilter(SecurityFilter.java:83)
  24. at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:132)
  25. at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:71)
  26. at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch
  27. (WebAppRequestDispatcher.java:1050)
  28. at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch
  29. (WebAppRequestDispatcher.java:588)
  30. at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward
  31. (WebAppRequestDispatcher.java:206)
  32. at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:80)
  33. at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:214)
  34. at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation
  35. (CachedInvocation.java:71)
  36. at com.ibm.ws.webcontainer.cache.invocation.CacheableInvocationContext.invoke
  37. (CacheableInvocationContext.java:116)
  38. at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:186)
  39. at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
  40. at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
  41. at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java(Compiled Code))
  42. at com.ibm.ws.http.HttpConnection.run(HttpConnection.java(Compiled Code))
  43. at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:672)


Message édité par tigrou_bis le 17-05-2006 à 14:36:22
n°1368804
the real m​oins moins
Posté le 17-05-2006 à 15:09:34  profilanswer
 

tigrou_bis a écrit :


J'ai fait ça. Tout passe comme il faut, les paramètres dans le tableau, tout bien.


bien sur, oui, et ça plante par magie, après, hein ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1368841
tigrou_bis
Boing... Boing...
Posté le 17-05-2006 à 15:27:22  profilanswer
 

the real moins moins a écrit :

bien sur, oui, et ça plante par magie, après, hein ?

Sans doute... Je me tue à dire que cette erreur n'arrive PAS sur mon serveur de dév. Donc chez moi, tout marche, que je sois en débug ou non. Tu veux peut-être que j'aille trouver le responsable du serveur de prod et que je lui demande "Steuplé, tu peux me laisser bidouiller sur le serveur pendant 1/4h et passer mon fichier en débug / pas à pas ? Promis, je ferai attention à pas planter la machine, pour que tu n'aies pas 200 utilisateurs furax sur le dos..."

n°1368846
the real m​oins moins
Posté le 17-05-2006 à 15:29:03  profilanswer
 

ben commence par determiner la diff entre ces 2 serveurs, alors... si tu peux pas reproduire le problème, je vois mal comment tu peux rêver de le résoudre.
et accessoirement, apprendre à lire une stacktrace, ça serait pas une perte de temps [:icon12]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1368890
tigrou_bis
Boing... Boing...
Posté le 17-05-2006 à 15:52:52  profilanswer
 

the real moins moins a écrit :

et accessoirement, apprendre à lire une stacktrace, ça serait pas une perte de temps [:icon12]

Je t'en prie, je ne demande que ça... Que peux-tu m'apprendre sur celle que j'ai indiquée ?
A moins que tu ne préfères me donner un lien vers une doc précise ? Merci d'avance :jap:
 
Edit : autant pour moi, je n'avais pas encore potassé ton topic-cours pour débutants en Java. Je vais donc m'y rendre de ce pas, merci :)


Message édité par tigrou_bis le 17-05-2006 à 15:54:46
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [JSP/DB2] Problème avec une requête d'insertion - Résolu

 

Sujets relatifs
[Résolu] [JAVA - RMI] Unsupported major.minor version 49.0[Perl] telnet connexion!! (resolu)
[Résolu] Lier un TextBox à un DataSet dans un TabControlAsp, Vb et Access, Problème requête! A l'aide
probleme sur expression reguliereProblème de pseudo frame chez OVH
[Résolu] Obtenir date depuis date initiale[JAVA] Pb de connexion DB Oracle à partir d'une applet [Résolu]
[flash] petit probleme avec un bouton 
Plus de sujets relatifs à : [JSP/DB2] Problème avec une requête d'insertion - Résolu


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR