java 将String传递给VARCHAR字段时不支持SQL类型1111

5kgi1eie  于 2023-04-19  发布在  Java
关注(0)|答案(4)|浏览(182)

我已经把头撞在这上面有一段时间了。
我正在使用iBatis和我的JAVA代码来运行驻留在Sybase DB中的Stored Proc。
存储过程需要一些参数。很少有参数声明为VARCHAR (6)
因此,在我的iBatisMap中,我对这些参数做了以下操作。

<parameter property="searchUserId" jdbcType="String" javaType="java.lang.String" mode="IN"/>

但是,当我这样做时,我得到以下错误。

--- Check the statement (update procedure failed).  
--- Cause: java.sql.SQLException: JZ006: Caught IOException: java.io.IOException: JZ0SL: Unsupported SQL type 1111.
Caused by: java.sql.SQLException: JZ006: Caught IOException: java.io.IOException: JZ0SL: Unsupported SQL type 1111.

所以我把我的Map改为:

<parameter property="searchUserId" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>

这消除了上面的错误,但是,现在参数searchUserId正在获取传入SP的null的值。我可以肯定地知道,从我的java代码中,我没有传递null
有人遇到过这个问题吗?我应该把我的Map改为什么?

zxlwwiss

zxlwwiss1#

我遇到这个问题是因为另一个原因:表中有一个geometry(PostGIS扩展)列,我猜驱动程序无法解析,删除该列后,它可以正常工作。

oxalkeyp

oxalkeyp2#

在使用VARCHAR作为jdbcType之后,您的参数元素看起来没有问题。您是否可以包含Map文件中的参数元素和过程元素的其余部分,以及创建参数Map和调用查询的代码?
它可能是一些简单的错误,比如在构造传递到查询中的map时出现了一个错字(至少这是我会犯的错误--我知道在使用Ibatis时,我对大写“userId”的看法不一致)。

j0pj023g

j0pj023g3#

我也遇到过类似的情况,在搜索了很多之后,我终于发现我的问题的答案是,我在构建Map时缺少了一个特定的“键”。我缺少了一个语句:

map.put("job_name", job.getJobName());

我在CronMapper.xml中使用JOB_NAME=#{job_name}(& I)
还有一些地方我使用了JOB_NAME=#{jobName}

2hh7jdfx

2hh7jdfx4#

我知道这个问题很古老,但需要考虑的另一件事是iBatis(MyBatis)占位符中的值是否为null。在我的情况下,错误“JZ 0 SL:由于传入String参数的值为null,因此引发了不受支持的SQL类型“1111”:
<select id = "getInProcessDocsCount" parameterType="String" resultType ="int"> select count(*) from my_database..pub_wip_t where wip_stts_cde='IP' and rfrn_row = #{daemonID} </select>
其中#{daemonID}为null。hth - adym

相关问题