Thank you for the referral!  Does the jTDS driver correctly implement 
PreparedStatement.setObject(index, null) (i.e. set the selected SQL parameter to 
NULL)?  Have you encountered any serious flaws using this driver?

Derek

-----Original Message-----
From: Kris Schneider [mailto:[EMAIL PROTECTED] 
Sent: May 20, 2004 2:57 PM
To: Tag Libraries Users List
Subject: RE: [JSTL] How do I enter a null value with <sql:param>?


On a slightly different topic, how about trying a different driver:

http://jtds.sourceforge.net/

Quoting Derek Mahar <[EMAIL PROTECTED]>:

> I need to clarify the first statement that I made in my previous post 
> (see below).  I claim that parameter sqlType in method 
> PreparedStatement.setNull(int parameterIndex, int sqlType) is 
> redundant because a NULL SQL parameter has no intrinsic type.  A NULL 
> SQL value applies to any column type, so it is unnecessary to identify 
> its type.
> 
> Derek
> 
> -----Original Message-----
> From: Derek Mahar
> Sent: May 20, 2004 2:08 PM
> To: Tag Libraries Users List
> Subject: RE: [JSTL] How do I enter a null value with <sql:param>?
> 
> 
> Thank you.  I appreciate your attention and quick response.
> 
> After reading JDBC Specification Section 13.2.2.3, Setting NULL 
> Parameters, I understand now why Kris suggested that the JSTL 
> specification add the sqlType attribute to <sql:param>:  method 
> PreparedStatement.setNull(int parameterIndex, int sqlType) requires 
> the type of the parameter that you want to set to NULL.  However, why 
> does method setNull require this parameter?  A NULL parameter has no 
> intrinsic type!  In order to determine the "type" of a NULL parameter, 
> you must consider its expression or assignment context.  That is, in 
> order to determine the "type" of a NULL parameter, must consider the 
> type of the column to which you are assigning the parameter in a SET 
> clause or the column or literal value to which you are comparing the 
> parameter in a WHERE clause.  Or, you must assign it a type using a 
> new attribute like sqlType.
> 
> According to JDBC Specification Section 13.2.3, Describing Outputs and 
> Inputs of a PreparedStatement Object, 
> ParameterMetaData.getParameterMetaData(int
> param) returns the type of each parameter in a parameterized query.  What
> "type" does this method return for a NULL parameter?  If it does, in fact,
> return a NULL parameter's contextual type, then I can change the <sql:param>
> implementation so that it invokes PreparedStatement.setNull instead of
> PreparedStatement.setObject for NULL parameters.  Otherwise, I cannot see how
> I can supply setNull with a correct "type".  Consequently, I'll just have to
> wait for Microsoft to fix its JDBC driver so that it correctly handles the
> case PreparedStatement.setObject(index,null).
> 
> Derek
> 
> -----Original Message-----
> From: Justyna Horwat [mailto:[EMAIL PROTECTED]
> Sent: May 20, 2004 1:10 PM
> To: Tag Libraries Users List
> Subject: Re: [JSTL] How do I enter a null value with <sql:param>?
> 
> 
> Derek,
> 
> I forwarded your comments to the JDBC specification lead. He said that
> now is a good time to bring up all of these annoyances in the 
> specification. He will look into clarifying this area in the upcoming 
> version of the spec.
> 
> Thanks,
> 
> Justyna
> 
> Derek Mahar wrote:
> 
> > After reading Section 17.7 of the JDBC specification (available at 
> > http://java.sun.com/products/jdbc/download.html), I now agree that 
> > there is a problem with the Microsoft SQL JDBC driver, but there is 
> > also a problem with the official Java JDBC API documentation that 
> > does not mention how PreparedStatement.setObject() handles the case 
> > PreparedStatement.setObject(index, null).  I guess we should ask Sun 
> > to correct (or complete) its JDBC API documentation and I need to 
> > ask Microsoft to fix its JDBC driver.
> > 
> > However, I still need to fix my problem now.  So, as I have Standard 
> > Tag Library source code, but do not have the source of the Microsoft 
> > SQL Server JDBC driver, I will likely change the <sql:param> 
> > implementation so that it invokes PreparedStatement.setNull() when 
> > it receives a null value.  Here is a perfect case where having 
> > source code is of tremendous benefit.
> > 
> > Thank you for pointing me in the right direction and being patient 
> > with my posts as I worked through my problem.
> > 
> > Derek
> > 
> > -----Original Message-----
> > From: Wolfgang Röckelein 
> > [mailto:[EMAIL PROTECTED]
> > Sent: May 19, 2004 10:40 AM
> > To: Tag Libraries Users List
> > Subject: Re: [JSTL] How do I enter a null value with <sql:param>?
> > 
> > 
> > Keith wrote:
> > 
> >>This was on the Users list and was my problem. But mine had to do
> >>specifically with the <sql:dateParam> and the Oracle JDBC driver. The 
> >>regular <sql:param> worked fine for me when I passed it a null value.
> >>
> >>Link to the starting thread in the archive: 
> >>http://www.mail-archive.com/[EMAIL PROTECTED]/msg06748
> >>.h
> >>tml
> > 
> > 
> > Thanks for digging this out. Both problems boil down to the case 
> > that "when setObject(index, null) is passed in a null value this 
> > should be
> converted
> > by the driver to an SQL null" does not work with the JDBC driver 
> > (perhaps
> only
> > for certain data types, which could be the cause why you see it only 
> > with
> > <sql:dateParam>). From my experience I know that the MS SQL JDBC driver
> has/had
> > problems in this area...
> > 
> > Regards,
> >    Wolfgang

-- 
Kris Schneider <mailto:[EMAIL PROTECTED]>
D.O.Tech       <http://www.dotech.com/>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

NOTICE: This email contains privileged and confidential information and is intended 
only for the individual to whom it is addressed. If you are not the named addressee, 
you should not disseminate, distribute or copy this e-mail. Please notify the sender 
immediately by e-mail if you have received this transmission by mistake and delete 
this communication from your system. E-mail transmission cannot be guaranteed to be 
secured or error-free as information could be intercepted, corrupted, lost, destroyed, 
arrive late or incomplete, or contain viruses. 

AVIS: Le présent courriel contient des renseignements de nature privilégiée et 
confidentielle et n’est destiné qu'à la personne à qui il est adressé. Si vous n’êtes 
pas le destinataire prévu, vous êtes par les présentes avisés que toute diffusion, 
distribution ou reproduction de cette communication est strictement interdite.  Si 
vous avez reçu ce courriel par erreur, veuillez en aviser immédiatement l’expéditeur 
et le supprimer de votre système. Notez que la transmission de courriel ne peut en 
aucun cas être considéré comme inviolable ou exempt d’erreur puisque les informations 
qu’il contient pourraient être interceptés, corrompues, perdues, détruites, arrivées 
en retard ou incomplètes ou contenir un virus.  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to