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
> 
> 
> ---------------------------------------------------------------------
> 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]
> 


---------------------------------------------------------------------
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]


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

Reply via email to