运行存储过程时出现以下异常:
com.microsoft.sqlserver.jdbc.SQLServerException:不支持从UNKNOWN到UNKNOWN的转换。
程序定义如下:
CREATE PROCEDURE spTest (
@p1 varchar(1024) ,
@p2 varchar(1024) ,
@p3 char(1) ,
@p4 varchar(254),
@p5 varchar(254),
@debug bit )
我在Java中的参数定义如下:
对象[] params = {“1,2,3”,“d”,“2”,“”,“”,1};
我认为这是由角色造成的。有什么想法吗?
答案 0 :(得分:7)
我找到了。发条 - 缪斯让我走上了正轨。设置参数时,char类型不会转换为Object。以下内容适用:
try (PreparedStatement st = con.prepareStatement(query)) {
int n = 1;
for (Object o : params) {
if (o instanceof Character) {
o = "" + o;
}
st.setObject(n, o);
n++;
}
st.executeQuery();
}
答案 1 :(得分:2)
如果您使用 jdbcTemplate.update(sql, List<Object[]>, int[])
而想使用 jdbcTemplate.
batchUpdate
(sql, List<Object[]>, int[])
,则可能会发生此错误。
它编译通过,因为jdbcTemplate中有一个jdbcTemplate.update(sql, Object...)
方法,但是它会产生“不支持从UNKNOWN到UNKNOWN的转换。”,因为它不能使用List<Object[]>
作为参数。