Java 不支持从未知到未知的转换
我在运行存储过程时遇到以下异常: com.microsoft.sqlserver.jdbc.SQLServerException:不支持从未知到未知的转换 程序定义如下:Java 不支持从未知到未知的转换,java,sql,sql-server,jdbc,Java,Sql,Sql Server,Jdbc,我在运行存储过程时遇到以下异常: com.microsoft.sqlserver.jdbc.SQLServerException:不支持从未知到未知的转换 程序定义如下: CREATE PROCEDURE spTest ( @p1 varchar(1024) , @p2 varchar(1024) , @p3 char(1) , @p4 varchar(254), @p5 varchar(254), @debug bit ) Java中我的参数定义如下: CREATE PROCEDURE sp
CREATE PROCEDURE spTest (
@p1 varchar(1024) ,
@p2 varchar(1024) ,
@p3 char(1) ,
@p4 varchar(254),
@p5 varchar(254),
@debug bit )
Java中我的参数定义如下:
CREATE PROCEDURE spTest (
@p1 varchar(1024) ,
@p2 varchar(1024) ,
@p3 char(1) ,
@p4 varchar(254),
@p5 varchar(254),
@debug bit )
对象[]参数={“1,2,3”,“d”,“2”,“1”,“1}
我认为这是由性格造成的。知道为什么吗?我找到了。发条缪斯让我走上了正轨。设置参数时,字符类型不会转换为对象。以下工作将起作用:
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();
}
如果您使用
jdbcTemplate.update(sql,List,int[])
,但您想使用jdbcTemplate.
(sql,List,int[])
,则可能会发生此错误
它可以编译,因为jdbcTemplate中有一个
jdbcTemplate.update(sql,Object…
方法,但它会产生“不支持从未知到未知的转换”,因为它不能使用List
作为参数。尝试使用String
“2”
,因为“char”实际上仍然是字符串数据(毕竟它可以有多个长度)。否则,我对“位”表示怀疑,因为Java并没有真正的等效类型…是的,是char类型导致了悲伤。转换为String可以让它工作。在处理Java枚举时发现了这个问题-显式转换为toString()当添加到param数组时,修复了我的问题。实际上,它可能是,它只是自动装箱到它的,而不是碰巧是字符串。最好在设置实际参数时转换它,因为这样可以更清楚地说明你在做什么。此外,如果你需要索引,只需使用传统的for loop,不要这样混合。类似地,Optional
在SQL Server驱动程序中没有转换,因此如果忘记取消对Optional
的装箱,就会发生此错误(在大多数情况下使用orElse(null)
),解决方案是什么?@ammy使用batchUpdate
而不是update
。