Java SQL server异常:使用jdbc连接检索数据时
我使用Java的Java SQL server异常:使用jdbc连接检索数据时,java,sql,sql-server,stored-procedures,Java,Sql,Sql Server,Stored Procedures,我使用Java的callable接口,尝试读取用sqlserver编写的存储过程的输出变量值 存储过程: 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
callable
接口,尝试读取用sqlserver编写的存储过程的输出变量值
存储过程:
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\u id
是输入变量,@project\u name
是输出变量。我想从Java应用程序中读取输出变量的这个值。当我运行代码时,我得到一个sql异常
它说:
形式参数“@project_id”未声明为输出
参数,但传入请求输出的实际参数
实际上,这不是一个输出参数@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);
是
?谢谢你的建议。我试过这个。但它不起作用。我得到了异常“SQLServerException:索引2超出范围”,这是因为您只向存储过程传递一个参数,需要两个;获取项目名称测试(?),是,获取。。。谢谢。它很好用。我的印象是,调用存储过程时必须只提供输入参数。我现在明白了。它起作用了。再次感谢。
cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);