You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-java@ibatis.apache.org by cowwoc <co...@bbs.darktech.org> on 2010/04/07 06:09:20 UTC

"JDBC requires that the JdbcType must be specified for all nullable parameters"

Hi,

     I am getting an error message:

     "JDBC requires that the JdbcType must be specified for all nullable 
parameters [...] The error may involve <mapper name>-Inline". Granted, 
telling me the mapper name is useful but I believe we can improve this 
error message in two regards:

1. I mistakenly read "nullable parameters" as "nullable columns" and 
wasted time looking for problems in my database schema. I wonder if 
others have made a similar mistake...? Is it possible to rephrase this 
as follows? "Mapper methods cannot accept null arguments without a 
properly configured JdbcType. Either specify a JdbcType or refrain from 
passing in null."

2. I noticed that when this exception is thrown iBatis has quite a bit 
more information available to it. Is it possible to add the following 
information to the error message?

Prepared statement: "SELECT * FROM animals WHERE name = ? AND age > ?", 
parameter #2 was null

     This would enable me to track down exactly which parameter was 
equal to null.

Thank you,
Gili

---------------------------------------------------------------------
To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
For additional commands, e-mail: user-java-help@ibatis.apache.org


Re: "JDBC requires that the JdbcType must be specified for all nullable parameters"

Posted by cowwoc <co...@bbs.darktech.org>.
     Done: https://issues.apache.org/jira/browse/IBATIS-771

Gili

On 07/04/2010 9:52 AM, Clinton Begin wrote:
> Yes, that can be reworded and more information is likely possible.
>
> Can you file a Jira ticket for this?
>
> Clinton
>
> On Tue, Apr 6, 2010 at 10:09 PM, cowwoc <cowwoc@bbs.darktech.org 
> <ma...@bbs.darktech.org>> wrote:
>
>     Hi,
>
>        I am getting an error message:
>
>        "JDBC requires that the JdbcType must be specified for all
>     nullable parameters [...] The error may involve <mapper
>     name>-Inline". Granted, telling me the mapper name is useful but I
>     believe we can improve this error message in two regards:
>
>     1. I mistakenly read "nullable parameters" as "nullable columns"
>     and wasted time looking for problems in my database schema. I
>     wonder if others have made a similar mistake...? Is it possible to
>     rephrase this as follows? "Mapper methods cannot accept null
>     arguments without a properly configured JdbcType. Either specify a
>     JdbcType or refrain from passing in null."
>
>     2. I noticed that when this exception is thrown iBatis has quite a
>     bit more information available to it. Is it possible to add the
>     following information to the error message?
>
>     Prepared statement: "SELECT * FROM animals WHERE name = ? AND age
>     > ?", parameter #2 was null
>
>        This would enable me to track down exactly which parameter was
>     equal to null.
>
>     Thank you,
>
>     Gili
>
>     ---------------------------------------------------------------------
>     To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
>     <ma...@ibatis.apache.org>
>     For additional commands, e-mail: user-java-help@ibatis.apache.org
>     <ma...@ibatis.apache.org>
>
>


Re: "JDBC requires that the JdbcType must be specified for all nullable parameters"

Posted by Clinton Begin <cl...@gmail.com>.
Yes, that can be reworded and more information is likely possible.

Can you file a Jira ticket for this?

Clinton

On Tue, Apr 6, 2010 at 10:09 PM, cowwoc <co...@bbs.darktech.org> wrote:

> Hi,
>
>    I am getting an error message:
>
>    "JDBC requires that the JdbcType must be specified for all nullable
> parameters [...] The error may involve <mapper name>-Inline". Granted,
> telling me the mapper name is useful but I believe we can improve this error
> message in two regards:
>
> 1. I mistakenly read "nullable parameters" as "nullable columns" and wasted
> time looking for problems in my database schema. I wonder if others have
> made a similar mistake...? Is it possible to rephrase this as follows?
> "Mapper methods cannot accept null arguments without a properly configured
> JdbcType. Either specify a JdbcType or refrain from passing in null."
>
> 2. I noticed that when this exception is thrown iBatis has quite a bit more
> information available to it. Is it possible to add the following information
> to the error message?
>
> Prepared statement: "SELECT * FROM animals WHERE name = ? AND age > ?",
> parameter #2 was null
>
>    This would enable me to track down exactly which parameter was equal to
> null.
>
> Thank you,
>
> Gili
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
> For additional commands, e-mail: user-java-help@ibatis.apache.org
>
>

Re: "JDBC requires that the JdbcType must be specified for all nullable parameters"

Posted by cowwoc <co...@bbs.darktech.org>.
     Done: https://issues.apache.org/jira/browse/IBATIS-772

Thanks,
Gili

On 07/04/2010 9:54 AM, Clinton Begin wrote:
> Null parameters are allowed, so we can't fail upon them.  To maintain 
> compatibility with string based calls against map parameters, we don't 
> distinguish between a null keyed entry in the map and no keyed entry 
> at all.
>
> I'd be willing to consider this change, but it's one of those things 
> that has always been true, and so some people might depend on this 
> behavior, especially those that don't use mapper interfaces.
>
> If you like, file a feature request in Jira.
>
> Clinton
>
> On Tue, Apr 6, 2010 at 10:27 PM, cowwoc <cowwoc@bbs.darktech.org 
> <ma...@bbs.darktech.org>> wrote:
>
>     On 07/04/2010 12:09 AM, cowwoc wrote:
>
>         Hi,
>
>            I am getting an error message:
>
>            "JDBC requires that the JdbcType must be specified for all
>         nullable parameters [...] The error may involve <mapper
>         name>-Inline". Granted, telling me the mapper name is useful
>         but I believe we can improve this error message in two regards:
>
>         1. I mistakenly read "nullable parameters" as "nullable
>         columns" and wasted time looking for problems in my database
>         schema. I wonder if others have made a similar mistake...? Is
>         it possible to rephrase this as follows? "Mapper methods
>         cannot accept null arguments without a properly configured
>         JdbcType. Either specify a JdbcType or refrain from passing in
>         null."
>
>         2. I noticed that when this exception is thrown iBatis has
>         quite a bit more information available to it. Is it possible
>         to add the following information to the error message?
>
>         Prepared statement: "SELECT * FROM animals WHERE name = ? AND
>         age > ?", parameter #2 was null
>
>            This would enable me to track down exactly which parameter
>         was equal to null.
>
>         Thank you,
>         Gili
>
>
>     The error message turned out to be even more misleading than I
>     first expected. I had this code:
>
>        @Select("SELECT value FROM seat_properties WHERE seat = #{seat}
>     AND key = #{key}")
>        String get(short seat, String key);
>
>     I wrongly assumed that iBatis would grab the parameter names from
>     the method declaration. Instead, it names the parameters #{1},
>     #{2}, etc. When iBatis tried invoking this method, it couldn't
>     find #{seat} so it assigned it a null value and failed with the
>     aforementioned error message. I had to use the @Param annotation
>     to fix this:
>
>        @Select("SELECT value FROM seat_properties WHERE seat = #{seat}
>     AND key = #{key}")
>        String get(@Param("seat") short seat, @Param("key") String key);
>
>     Shouldn't iBatis fail-fast when the parameter it is looking up
>     ("seat" in my case) is missing, as opposed to assigning it a null
>     value? A nice error message would be "Could not find parameter
>     #{seat}. The following parameters are defined: #{1}, #{2}." I
>     would have caught on fairly quickly with that error message.
>
>
>     Gili
>
>     ---------------------------------------------------------------------
>     To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
>     <ma...@ibatis.apache.org>
>     For additional commands, e-mail: user-java-help@ibatis.apache.org
>     <ma...@ibatis.apache.org>
>
>


Re: "JDBC requires that the JdbcType must be specified for all nullable parameters"

Posted by Clinton Begin <cl...@gmail.com>.
Null parameters are allowed, so we can't fail upon them.  To maintain
compatibility with string based calls against map parameters, we don't
distinguish between a null keyed entry in the map and no keyed entry at all.

I'd be willing to consider this change, but it's one of those things that
has always been true, and so some people might depend on this behavior,
especially those that don't use mapper interfaces.

If you like, file a feature request in Jira.

Clinton

On Tue, Apr 6, 2010 at 10:27 PM, cowwoc <co...@bbs.darktech.org> wrote:

> On 07/04/2010 12:09 AM, cowwoc wrote:
>
>> Hi,
>>
>>    I am getting an error message:
>>
>>    "JDBC requires that the JdbcType must be specified for all nullable
>> parameters [...] The error may involve <mapper name>-Inline". Granted,
>> telling me the mapper name is useful but I believe we can improve this error
>> message in two regards:
>>
>> 1. I mistakenly read "nullable parameters" as "nullable columns" and
>> wasted time looking for problems in my database schema. I wonder if others
>> have made a similar mistake...? Is it possible to rephrase this as follows?
>> "Mapper methods cannot accept null arguments without a properly configured
>> JdbcType. Either specify a JdbcType or refrain from passing in null."
>>
>> 2. I noticed that when this exception is thrown iBatis has quite a bit
>> more information available to it. Is it possible to add the following
>> information to the error message?
>>
>> Prepared statement: "SELECT * FROM animals WHERE name = ? AND age > ?",
>> parameter #2 was null
>>
>>    This would enable me to track down exactly which parameter was equal to
>> null.
>>
>> Thank you,
>> Gili
>>
>
> The error message turned out to be even more misleading than I first
> expected. I had this code:
>
>    @Select("SELECT value FROM seat_properties WHERE seat = #{seat} AND key
> = #{key}")
>    String get(short seat, String key);
>
> I wrongly assumed that iBatis would grab the parameter names from the
> method declaration. Instead, it names the parameters #{1}, #{2}, etc. When
> iBatis tried invoking this method, it couldn't find #{seat} so it assigned
> it a null value and failed with the aforementioned error message. I had to
> use the @Param annotation to fix this:
>
>    @Select("SELECT value FROM seat_properties WHERE seat = #{seat} AND key
> = #{key}")
>    String get(@Param("seat") short seat, @Param("key") String key);
>
> Shouldn't iBatis fail-fast when the parameter it is looking up ("seat" in
> my case) is missing, as opposed to assigning it a null value? A nice error
> message would be "Could not find parameter #{seat}. The following parameters
> are defined: #{1}, #{2}." I would have caught on fairly quickly with that
> error message.
>
>
> Gili
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
> For additional commands, e-mail: user-java-help@ibatis.apache.org
>
>

Re: "JDBC requires that the JdbcType must be specified for all nullable parameters"

Posted by cowwoc <co...@bbs.darktech.org>.
On 07/04/2010 12:09 AM, cowwoc wrote:
> Hi,
>
>     I am getting an error message:
>
>     "JDBC requires that the JdbcType must be specified for all 
> nullable parameters [...] The error may involve <mapper name>-Inline". 
> Granted, telling me the mapper name is useful but I believe we can 
> improve this error message in two regards:
>
> 1. I mistakenly read "nullable parameters" as "nullable columns" and 
> wasted time looking for problems in my database schema. I wonder if 
> others have made a similar mistake...? Is it possible to rephrase this 
> as follows? "Mapper methods cannot accept null arguments without a 
> properly configured JdbcType. Either specify a JdbcType or refrain 
> from passing in null."
>
> 2. I noticed that when this exception is thrown iBatis has quite a bit 
> more information available to it. Is it possible to add the following 
> information to the error message?
>
> Prepared statement: "SELECT * FROM animals WHERE name = ? AND age > 
> ?", parameter #2 was null
>
>     This would enable me to track down exactly which parameter was 
> equal to null.
>
> Thank you,
> Gili

The error message turned out to be even more misleading than I first 
expected. I had this code:

     @Select("SELECT value FROM seat_properties WHERE seat = #{seat} AND 
key = #{key}")
     String get(short seat, String key);

I wrongly assumed that iBatis would grab the parameter names from the 
method declaration. Instead, it names the parameters #{1}, #{2}, etc. 
When iBatis tried invoking this method, it couldn't find #{seat} so it 
assigned it a null value and failed with the aforementioned error 
message. I had to use the @Param annotation to fix this:

     @Select("SELECT value FROM seat_properties WHERE seat = #{seat} AND 
key = #{key}")
     String get(@Param("seat") short seat, @Param("key") String key);

Shouldn't iBatis fail-fast when the parameter it is looking up ("seat" 
in my case) is missing, as opposed to assigning it a null value? A nice 
error message would be "Could not find parameter #{seat}. The following 
parameters are defined: #{1}, #{2}." I would have caught on fairly 
quickly with that error message.

Gili

---------------------------------------------------------------------
To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
For additional commands, e-mail: user-java-help@ibatis.apache.org