我使用Java的callable接口,尝试读取用SQL Server编写的存储过程的输出变量值。

存储过程:

CREATE PROCEDURE [Get_Project_Name_Test]
    @project_id int,
    @project_name varchar(150) OUTPUT
AS
BEGIN
    SET NOCOUNT ON;
    SET @project_name = (SELECT Name from Project where Project_Id = @project_id)
END
GO


此处@project_id是输入变量,而@project_name是输出变量。我想从Java应用程序读取此输出变量的值。当我运行代码时,我得到一个SQL异常。

它说:


  正式参数“ @project_id”未声明为OUTPUT
  参数,但实际参数已传入请求的输出中。


实际上,这不是输出参数。 @project_id是用于检索结果的输入参数。

用于调用此存储过程的Java代码

CallableStatement cstmt = con.prepareCall("{call Get_Project_Name_Test(?)}");
cstmt.setInt(1, 148);
cstmt.registerOutParameter(1, java.sql.Types.VARCHAR);
cstmt.executeQuery();
String x = cstmt.getString(1);
System.out.println(x);


如何找出错误原因?

最佳答案

应该

cstmt.registerOutParameter(1, java.sql.Types.VARCHAR);




 cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);


10-08 19:55