Java 不支持从未知到未知的转换

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

我在运行存储过程时遇到以下异常:

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