Aide - Recherche - Membres - Calendrier
Version complète : [java / sql] Problème de requête... pas possible
Forum Développeur - Administration serveur, programmation et base de données > Programmation > Java
wox-xion
Voilà, je fais une requête, pour enregistrer une modification de news sur ma base de données.
Ca marche dans presque tous les cas... sauf celui-ci, qu'est-ce qui coince ?

CODE
HTTP Status 500 -



type Exception report



message



description The server encountered an internal error () that prevented it from fulfilling this request.



exception



javax.servlet.ServletException: javax.servlet.jsp.JspException:

UPDATE `wox_news` SET `news_title`="[wxmap] Version 0.5 en construction", `news_author`='xion', `news_email`='wox-xion[at]bluemail[dot]ch', `news_text`="Après test d'une map de 25x25 (625 cases), j'ai confirmé que wxmap n'était pas du tout optimisé, cela après une discussion avec smith, sur msn (de <a href='http://flash.media-box.net).' class='normal'>http://flash.media-box.net).</a><br />J'ai donc décidé de me pencher sur comment mieux penser les maps, et j'en suis arrivé à une conclusion, ne pas utiliser de map basée sur les <acronym title='eXtensible Markup Language'>xml</acronym> pour les tiles que l'on affiche.<br />La map sera donc toujours en <acronym title='eXtensible Markup Language'>xml</acronym>, mais pas pour les tiles, qui seront (en CDATA), dans un node, sous format <b>text</b>.<br /><br />Voici un exemple à ce jour (wxmap version 0.5 sera la finalisation de cette version, qui n'est pas du tout intégrée à xuhnix pour l'instant)&nbsp;:<br /><br /><pre class='code xml'>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;<br />&lt;wxmap version=&quot;0.5&quot; dataType=&quot;wxmap&quot;<br />&nbsp; &nbsp; &nbsp;&nbsp; <acronym title='eXtensible Markup Language'>xml</acronym>ns=&quot;http://www.wox-xion.org/XMLSchemas/wxmap/0.5&quot;<br />  <acronym title='eXtensible Markup Language'>xml</acronym>ns:wx=&quot;http://www.wox-xion.org/XMLSchemas/wxmap/0.5&quot; <br />  <acronym title='eXtensible Markup Language'>xml</acronym>ns:xsi=&quot;http://www.w3.org/2000/10/XMLSchema-instance&quot;<br />  <acronym title='eXtensible Markup Language'>xml</acronym>ns:xhtml=&quot;http://www.w3.org/1999/xhtml&quot; <br />  xsi:schemaLocation=&quot;http://www.wox-xion.org/XMLSchemas/wxmap/0.5 wxmap-0.5.xsd&quot;&gt;<br />&nbsp; &lt;headers&gt;<br />&nbsp; &nbsp;&nbsp; &lt;metas&gt;<br />&nbsp; &nbsp; &nbsp;&nbsp; &lt;meta data=&quot;mapName&quot; value=&quot;base map&quot; /&gt;<br />&nbsp; &nbsp; &nbsp;&nbsp; &lt;meta data=&quot;mapAuthor&quot; value=&quot;xion&quot; /&gt;<br />&nbsp; &nbsp; &nbsp;&nbsp; &lt;meta data=&quot;mapDateCrea&quot; value=&quot;27.02.2005&quot; /&gt;<br />&nbsp; &nbsp; &nbsp;&nbsp; &lt;meta data=&quot;mapCopyright&quot; value=&quot;wox-xion.com&quot; /&gt;<br />&nbsp; &nbsp; &nbsp;&nbsp; &lt;meta data=&quot;mapNotes&quot; value=&quot;notes sur la nouvelle version en construction&quot;&gt;<br />&nbsp; &nbsp; &nbsp;&nbsp; &lt;!--<br />&nbsp; &nbsp; &nbsp;&nbsp; Pour l'instant, rien n'est intégré à xuhnix, cependant, la structure est presque prête.<br />&nbsp; &nbsp; &nbsp;&nbsp; --&gt;<br />&nbsp; &nbsp; &nbsp;&nbsp; &lt;/meta&gt;<br />&nbsp; &nbsp;&nbsp; &lt;/metas&gt;<br />&nbsp; &nbsp;&nbsp; &lt;properties _id=&quot;1&quot; _name=&quot;template&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; caseh=&quot;12&quot; casew=&quot;20&quot; caseH=&quot;80&quot;<br />   _xscale=&quot;85&quot; _yscale=&quot;85&quot;<br />   _backbase=&quot;none&quot; _frontbase=&quot;none&quot;<br />   _background=&quot;./wxsprites/bgmap.jpg&quot; _bgx=&quot;-500&quot; _bgy=&quot;-300&quot;<br />    _frontground=&quot;./wxsprites/fgmap.swf&quot; _fgx=&quot;0&quot; _fgy=&quot;0&quot;<br /> /&gt;<br />&nbsp; &lt;/headers&gt;<br />&nbsp; &lt;core&gt;<br />&nbsp; &nbsp;&nbsp; &lt;define&gt;<br /> &lt;!--&lt;ref id=&quot;x&quot; tilename=&quot;name&quot; type=&quot;base|front&quot; from=&quot;1|01|01|01|01|01|0&quot; to=&quot;1|01|01|01|01|01|0&quot; scope=&quot;none|x&quot; /&gt;!--&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &lt;ref id=&quot;#1&quot; tilename=&quot;earth@herb1&quot; type=&quot;base&quot; from=&quot;111111&quot; to=&quot;111111&quot; scope=&quot;none&quot; /&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &lt;ref id=&quot;#2&quot; tilename=&quot;earth@herb2&quot; type=&quot;base&quot; from=&quot;111111&quot; to=&quot;111111&quot; scope=&quot;none&quot; /&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &lt;ref id=&quot;#3&quot; tilename=&quot;earth@tree1&quot; type=&quot;base&quot; from=&quot;111111&quot; to=&quot;111111&quot; scope=&quot;none&quot; /&gt;<br />&nbsp; &nbsp;&nbsp; &lt;/define&gt;<br />&nbsp; &nbsp;&nbsp; &lt;map width=&quot;25&quot; height=&quot;25&quot;&gt;&lt;![CDATA[{#1:0-1-1+0-1-2+0-1-3+0-1-4, #2:0-10-5*0-20-12+0-21-x, #3-y-0}]]&gt;&lt;/map&gt;<br />&nbsp; &nbsp;&nbsp; &lt;objects&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;name id=&quot;tree1@wox-xion_sprite1__earth&quot; title=&quot;Ceci est un arbre&quot; _x=&quot;10&quot; _y=&quot;10&quot; _z=&quot;0&quot; _depth=&quot;normal&quot; /&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;name id=&quot;tree1@wox-xion_sprite2__earth&quot; title=&quot;Ceci est un arbre&quot; _x=&quot;15&quot; _y=&quot;10&quot; _z=&quot;0&quot; _depth=&quot;normal&quot; /&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;name id=&quot;tree1@wox-xion_sprite3__earth&quot; title=&quot;Ceci est un arbre&quot; _x=&quot;20&quot; _y=&quot;10&quot; _z=&quot;0&quot; _depth=&quot;normal&quot; /&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;name id=&quot;tree2@wox-xion_sprite1__earth&quot; title=&quot;Ceci est un autre arbre&quot; _x=&quot;10&quot; _y=&quot;15&quot; _z=&quot;0&quot; _depth=&quot;normal&quot; /&gt;<br />&nbsp; &nbsp;&nbsp; &lt;/objects&gt;<br />&nbsp; &nbsp;&nbsp; &lt;events&gt;<br />&nbsp; &nbsp; &nbsp; &lt;action&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;condition type=&quot;case&quot; variable=&quot;_pos&quot; cond=&quot;==&quot;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;case value=&quot;0:5:5&quot;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;msg value=&quot;Vous vous trouvez sur la case 0:5:5&quot; type=&quot;0&quot; online=&quot;false&quot; /&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/case&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;case value=&quot;0:15:15&quot;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;msg value=&quot;Vous vous trouvez sur la case 0:15:15&quot; type=&quot;0&quot; online=&quot;false&quot; /&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/case&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;case value=&quot;0:25:25&quot;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;msg value=&quot;Vous vous trouvez sur la case 0:25:25&quot; type=&quot;0&quot; online=&quot;false&quot; /&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/case&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;/condition&gt;<br />&nbsp; &nbsp; &nbsp; &lt;/action&gt;<br />&nbsp; &nbsp; &nbsp; &lt;contact area=&quot;0:7:12&quot;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;condition type=&quot;if&quot; variable=&quot;#over1&quot; cond=&quot;!=&quot; value=&quot;true&quot;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;set variable=&quot;over1&quot; value=&quot;true&quot; scope=&quot;personal&quot; /&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;/condition&gt;<br />&nbsp; &nbsp; &nbsp; &lt;/contact&gt;<br />&nbsp; &nbsp; &nbsp; &lt;contact area=&quot;0:8:12&quot;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;condition type=&quot;if&quot; variable=&quot;#over1&quot; cond=&quot;==&quot; value=&quot;true&quot;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;msg value=&quot;Vous avez marché sur la case 0:8:12 depuis la 0:7:12&quot; type=&quot;0&quot; online=&quot;false&quot; /&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;/condition&gt;<br />&nbsp; &nbsp; &nbsp; &lt;/contact&gt;<br />&nbsp; &nbsp;&nbsp; &lt;/events&gt;<br /> &lt;/core&gt;<br />&nbsp; &lt;footers&gt;<br />&nbsp; &lt;!--<br />&nbsp; Template pour faire des maps.<br />&nbsp; Les infos du copyright&nbsp;:<br />&nbsp; -vous ne pouvez utiliser cette map dans un dessein autre que celui de wox-xion.com<br />&nbsp; -vous ne pouvez copier quoi que ce soit dans un dessein autre que celui de wox-xion.com<br />&nbsp; -vous pouvez l'utiliser comme template, pour wox-xion.com<br />&nbsp; -concernant le contact pour la map&nbsp;:<br />&nbsp; &lt;&lt; wox-xion[at]bluemail[dot]ch &gt;&gt;<br />&nbsp; --&gt;<br />&nbsp; &lt;/footers&gt;<br />&lt;/wxmap&gt;</pre><br /><br />Le header et le footer n'ont pas été modifiés.<br />Les modifications se font au niveau de l'anciennement appelée <b>&quot;map&quot;</b>, qui devient <b>&quot;core&quot;</b>.<br />Un node qui est désormais partagé en&nbsp;:<ul><li>define&nbsp;: la définition des tiles et leurs propriétés (pour s'y rapporter via l'id)</li><li>map&nbsp;: la disposition des tiles via un gestion des multiplication, addition de coordonnées et les coordonnées en elipse</li><li>objects&nbsp;: la disposition des objets qui font partie intégrante à wxmap (peuvent être remplacés par des tiles la plupart des cas</li><li>events&nbsp;: la liste des événements, subdivisée en éléments <b>&quot;action&quot;</b> (après utilisation de la ldc /action) et <b>&quot;contact&quot;</b> (après accès à une case)</li></ul><br />Les events seront remaniés, on pourra utiliser des conditions du type <b>&quot;if&quot;</b> ou <b>&quot;switch&quot;</b>, selon l'utilité.<br /><br />Des infos dès que xuhnix intègrera les bases du nouveau format. <img src='/smiley:wink' class='smiley' title=';)' alt=';)' />", `news_group`='0', `news_type`='wox-xion-formule' WHERE news_id='46'

: No value specified for parameter 1

org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:821)

org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)

org.apache.jsp.administration.admin_modification_jsp._jspService(admin_modification_jsp.java:164)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)



root cause



java.sql.SQLException: No value specified for parameter 1

com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2296)

com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1746)

com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1619)

org.apache.taglibs.standard.tag.common.sql.UpdateTagSupport.doEndTag(UpdateTagSupport.java:157)

org.apache.jsp.administration.admin_modification_jsp._jspx_meth_sql_update_0(admin_modification_jsp.java:306)

org.apache.jsp.administration.admin_modification_jsp._jspService(admin_modification_jsp.java:123)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)



note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.

Apache Tomcat/5.0.28


Voici l'erreur que me donne Jasper... pourtant le paramètre 1 est défini, et les autres paramètres sont ok... qu'est-ce qui coince ?

OK, le texte est long, mais il ne contient pas de " qui puisse faire coincer la requête...
De plus, si je copie cette requête et l'exécute sous mysql, directement... et bien elle passe sans problème... allez comprendre ! sad.gif
liguorien
tout est dans le message d'erreur : [quote]java.sql.SQLException: No value specified for parameter 1 com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2296) com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1746) com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1619) ...[/quote] tu utilises un PreparedStatement et le paramêtre 1 n'est pas setté. Il doit surement avoir un '?' en trop dans la requête. Ceci dit, ça irait pas mal mieu en regardant le code et non la verbose de ta requête SQL biggrin.gif wink.gif
wox-xion
Ca me dérange légèrement, vu que je fais ça via la balise <sql:update> (donc pas de PreparedStatement qui soit sad.gif )... argh, oui, c'est embêtant... voici le code que j'utilise :
CODE
<%@page pageEncoding="ISO-8859-1" contentType="text/html"%>

<%@taglib uri='http://java.sun.com/jstl/core' prefix='c' %>

<%@taglib uri='http://java.sun.com/jstl/fmt' prefix='fmt' %>

<%@taglib uri='http://java.sun.com/jstl/sql' prefix='sql' %>

<jsp:useBean id="datetime" class="java.util.Date" />

<jsp:useBean id="tf" class="org.xion.wxw.textFormatter" scope="session" />

<jsp:useBean id="ef" class="org.xion.wxw.emailFormatter" scope="session" />

<jsp:setProperty name="tf" property="textFormatted" param="text" />

<c:set var="text"><jsp:getProperty name="tf" property="textFormatted" /></c:set>

<jsp:setProperty name="ef" property="emailFormatted" param="email" />

<c:set var="email"><jsp:getProperty name="ef" property="emailFormatted" /></c:set>

<% if(request.getMethod().equals("POST")){ %>

<sql:setDataSource

   driver="org.gjt.mm.mysql.Driver"

   url="jdbc:mysql://localhost/woxxion"

   user="..."

   password="..."

   var="DataSource"

   scope="page" />

   <c:choose>

   <c:when test="${param.mode == 'news'}">

<sql:update dataSource="${DataSource}">

INSERT INTO `wox_news` (`news_group`, `news_title` , `news_text` , `news_author` , `news_email` , `news_date` , `news_type`)

VALUES ('<c:out value="${param.group}" escapeXml="false" />', '<c:out value="${param.title}" escapeXml="false" />', "<c:out value="${text}" escapeXml="false" />", '<c:out value="${param.login}" escapeXml="false" />', '<c:out value="${email}" escapeXml="false" />', CURDATE() , '<c:out value="${param.type}" escapeXml="false" />')

</sql:update>

<c:redirect url="/admin.xml" />

   </c:when>

   <c:when test="${param.mode == 'comment'}">

   ...

   </c:when>

   </c:choose>

<% } %>

Et je reçois les infos depuis un formulaire flash.

Le pire, c'est que la majeure partie du temps, ça marche impécablement.
liguorien
argh, j'ai beaucoup de misère à voir du SQL mélangé avec du HTML, ça me donne mal au coeur... :roll: (opinion personelle)

comme je t'ai déjà dit ici et ici, je sépare toujours la logique de la présentation. C'est plus simple, plus stable, plus performant, favorise la réutilisation et permet une meilleur délégation des tâches au sein d'une équipe.

Tout ça pour dire que je ne suis pas un grand fan des JSP et de leur tag custom s'il sont utilisé à d'autre fin que générer du HTML.

Désolé sur ce coup là je ne peux rien faire pour toi tongue.gif
wox-xion
oki, je vois... c'est clair que c'est mieux de séparer présentation et gestion des données pour un autre but...

alors c'est bon, on m'a eu, je vais la faire, cette servlet pour régler définitivement ce problème wink.gif je poserai des questions si ma servlet coince, prochainement wink.gif

mais une idée qui me vient directement, c'est : j'ai un bean pour jsp, est-il valable en tant que vrai bean ? sachant qu'il n'implémente rien, ni ne s'étend...
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.