Java 参数编号1不是输出参数
尝试使用JDBC执行存储过程时,我似乎无法克服此错误 java.sql.SQLException:参数编号1不是OUT参数Java 参数编号1不是输出参数,java,sql,stored-procedures,jdbc,parameters,Java,Sql,Stored Procedures,Jdbc,Parameters,尝试使用JDBC执行存储过程时,我似乎无法克服此错误 java.sql.SQLException:参数编号1不是OUT参数 如果存储过程定义包含一个IN参数,该参数查看您共享的代码,那么Call语句应该如下所示 CallableStatement cs3 = conn.prepareCall("{call sp1(?)}"); cs3.setString(1, java.sql.Types.VARCHAR); 该参数需要设置为IN参数 如果存储过程定义包含OUT参数,则需要修改cal
如果存储过程定义包含一个IN参数,该参数查看您共享的代码,那么Call语句应该如下所示
CallableStatement cs3 = conn.prepareCall("{call sp1(?)}");
cs3.setString(1, java.sql.Types.VARCHAR);
该参数需要设置为IN参数
如果存储过程定义包含OUT参数,则需要修改call语句
CallableStatement cs3 = conn.prepareCall("{? = call sp1()}");
cs3.registerOutParameter(1, java.sql.Types.VARCHAR);
在任何情况下,分享您的程序定义,这将使其更清晰 存储过程是否独立运行(即在Java之外)?您使用的是什么DBMS?我使用的是在localhost上运行的Mysql。我在Netbeans IDEOdd中运行所有操作,无法重现此异常。你的代码为我运行。我使用的是MySQL版本5.5.22,MySQL连接器JAR版本5.1.18,Windows 8.1 x64,Java 1.8.0_05,如果有任何帮助的话。我已经尝试了第二个选项,因为我有一个参数。我现在得到了这个错误:java.lang.NullPointerException
cs3.setString(1,java.sql.Types.VARCHAR)代码>将是一个语法错误,因为您正在为字符串参数指定一个整数。您可以为它指定一个字符串值。因为这个问题是关于OUT
,所以作为你答案的一部分是没有意义的。其次,{?=call sp1()}
转义将用于具有单个返回值的存储过程,而不是OUT
参数。
CallableStatement cs3 = conn.prepareCall("{? = call sp1()}");
cs3.registerOutParameter(1, java.sql.Types.VARCHAR);