【发布时间】:2016-01-12 07:36:05
【问题描述】:
我有一个存储过程“test”,它看起来像:
CREATE PROCEDURE test
@name varchar(32)
AS
DECLARE
@login_status TINYINT,
@syb_login varchar(20),
@syb_pass varchar(20)
...
..
BEGIN
SELECT @status = 0
SELECT @login as login,
@pass as pass,
@status as status
RETURN 0
END
我需要将单个输入参数“myName”作为输入参数传递给此过程,然后将登录、传递和状态作为输出(仅来自一条记录)参数返回。
在 JDBC 中,我尝试执行如下操作:
String query = "{call test(?,?,?)}";
System.out.println(query);
CallableStatement proc = null;
ResultSet rs;
try {
proc = connection.prepareCall(query);
proc.setString(1, "myName");
proc.registerOutParameter(2, java.sql.Types.VARCHAR);
proc.registerOutParameter(3, java.sql.Types.VARCHAR);
proc.execute();
System.out.println(proc.getString(2));
这总是给出异常:
java.sql.SQLException: JZ0SG: A CallableStatement did not return as many output parameters as the application had registered for it.
at com.sybase.jdbc4.jdbc.SybConnection.getAllExceptions(Unknown Source)
at com.sybase.jdbc4.jdbc.SybStatement.handleSQLE(Unknown Source)
at com.sybase.jdbc4.jdbc.ParamManager.nextResult(Unknown Source)
at com.sybase.jdbc4.jdbc.ParamManager.doGetOutValueAt(Unknown Source)
at com.sybase.jdbc4.jdbc.ParamManager.getOutValueAt(Unknown Source)
at com.sybase.jdbc4.jdbc.SybCallableStatement.getString(Unknown Source)
我试过JDBC execute SQL Server stored procedure with return value and input/output parameters, https://msdn.microsoft.com/en-us/library/ms378108.aspx 但这不起作用。
【问题讨论】:
-
显示您的过程的完整创建语句。
-
输入/输出变量在
CREATE PROCEDURE test <params> AS ...中声明。向我们展示<params>。 -
@OlivierGrégoire 我已经添加了 create 语句
-
你的存储过程只有一个输入(
@name),没有输出参数。当参数不存在时,您不能注册参数。您要么必须使用存储过程生成的ResultSet,要么必须重写存储过程,使其具有输出参数。
标签: java sql-server stored-procedures jdbc