-----Mensaje original----- De: Hans Bergsten [mailto:[EMAIL PROTECTED] Enviado el: Viernes, 16 de Abril de 2004 11:07 a.m. Para: Tag Libraries Users List Asunto: Re: More SQL Date problems
Justyna Horwat wrote: > Hans, > > I looked into the SQL problem and consulted with the JDBC specification > lead, Jonathan Bruce. Jonathan said that what JSTL is doing is correct: > when setObject(index, null) is passed in a null value this should be > converted by the driver to an SQL null. > > This behavior is in fact enforced as part of the J2EE compatibility in > the CTS. The JDBC Driver Test Suite is publicly accessible and can be > used to weed out the JDBC drivers that are not compatible. Thanks Justyna! So, it sounds like the case is closed. A JDBC driver that doesn't handle setObject(index, null) the way JSTL expects isn't spec compliant. Hans > Hans Bergsten wrote: > >> Wolfgang Röckelein wrote: >> >>> Hi, >>> >>> at JDBC level there are two different possibilities to set a >>> parameter value to null: with setNull and setting to null. Depending >>> on the driver sometimes only on of these methods work, and when it >>> does not work, you see the "java.sql.SQLException: Invalid column >>> type" error you see. >>> >>> I think this was already changed or discussed sometime during the >>> standard taglib development. >> >> >> >> Right. I was looking at the code for JSTL in the CVS archive, and it >> calls setObject(index, null) when passed a null value, and there's a >> comment that this should be converted by the driver to an SQL null. >> Browsing through the JDBC JavaDocs and the JDBC spec, there seems to >> be some support for this claim, but it's not 100% clear. It's possible >> that the driver Keith is using doesn't handle it, and maybe it would >> be better if JSTL used setNull(). The reason it doesn't is that it >> would required additional type info for the <sql:param> case. >> >> Pierre, this may be something to look at again for JSTL.next. >> >> Keith, a work-around for this would be: >> >> <fmt:parseDate value="${param.dob}" var="parsed_dob" >> pattern="dd-MM-yyyy" /> >> >> <c:choose> >> <c:when test="${!empty parsed_dob}"> >> <sql:update> >> INSERT INTO resource_registry (resource_id, dob) >> VALUES (res_id_seq.NEXTVAL, ? ) >> <sql:dateParam value="${parsed_dob}" type="date"/> >> </sql:update> >> </c:when> >> <c:otherwise> >> INSERT INTO resource_registry (resource_id) >> VALUES (res_id_seq.NEXTVAL) >> </sql:update> >> </c:otherwise> >> </c:choose> >> >> If the real case involves many parameters that may be null, this >> gets ugly, but if it's just this one, it may be okay. >> >> Hans -- Hans Bergsten <[EMAIL PROTECTED]> Gefion Software <http://www.gefionsoftware.com/> Author of O'Reilly's "JavaServer Pages", covering JSP 2.0 and JSTL 1.1 Author of O'Reilly's "JavaServer Faces", covering JSF 1.0 Details at <http://TheJSPBook.com/> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]