【发布时间】:2010-12-16 03:56:16
【问题描述】:
我今天一直在尝试通过 JDBC 执行 MS SQL Server 存储过程,但到目前为止还没有成功。存储过程有 1 个输入和 1 个输出参数。在代码中设置存储过程调用时,我使用的每种组合都会出现错误,指出无法找到存储过程。我在下面提供了我正在执行的存储过程(注意:这是供应商代码,所以我无法更改它)。
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[spWCoTaskIdGen]
@OutIdentifier int OUTPUT
AS
BEGIN
DECLARE @HoldPolicyId int
DECLARE @PolicyId char(14)
IF NOT EXISTS
(
SELECT *
FROM UniqueIdentifierGen (UPDLOCK)
)
INSERT INTO UniqueIdentifierGen VALUES (0)
UPDATE UniqueIdentifierGen
SET
CurIdentifier = CurIdentifier + 1
SELECT @OutIdentifier =
(SELECT CurIdentifier
FROM UniqueIdentifierGen)
END
代码如下:
CallableStatement statement = connection
.prepareCall("{call dbo.spWCoTaskIdGen(?)}");
statement.setInt(1, 0);
ResultSet result = statement.executeQuery();
我收到以下错误:严重:找不到存储过程 'dbo.spWCoTaskIdGen'。
我也试过
CallableStatement statement = connection
.prepareCall("{? = call dbo.spWCoTaskIdGen(?)}");
statement.registerOutParameter(1, java.sql.Types.INTEGER);
statement.registerOutParameter(2, java.sql.Types.INTEGER);
statement.executeQuery();
以上结果:严重:找不到存储过程“dbo.spWCoTaskIdGen”。
我也试过了:
CallableStatement statement = connection
.prepareCall("{? = call spWCoTaskIdGen(?)}");
statement.registerOutParameter(1, java.sql.Types.INTEGER);
statement.registerOutParameter(2, java.sql.Types.INTEGER);
statement.executeQuery();
上面的代码导致以下错误:找不到存储过程“spWCoTaskIdGen”。
最后,我还要指出以下几点:
-
我已经使用了 MS SQL Server Management Studio 工具并且能够成功运行存储过程。为执行存储过程而生成的sql如下:
GO DECLARE @return_value int; DECLARE @OutIdentifier int; EXEC @return_value = [dbo].[spWCoTaskIdGen] @OutIdentifier = @OutIdentifier OUTPUT; SELECT @OutIdentifier [@OutIdentifier], @return_value [Return Value]; GO 正在执行的代码使用上面第 1 点中使用的相同用户 ID 运行。
- 在创建 Connection 对象的代码中,我记录了我正在连接的数据库,并且代码正在连接到正确的数据库。
有什么想法吗?
非常感谢您。
【问题讨论】:
-
我添加了一个额外的场景:CallableStatement statement = connection.prepareCall("{? = call spWCoTaskIdGen(?)}"); statement.registerOutParameter(1, java.sql.Types.INTEGER); statement.registerOutParameter(2, java.sql.Types.INTEGER); statement.executeQuery();上面的代码导致以下错误:07:50:25,978 ERROR JDBCExceptionReporter:101 - 找不到存储过程“spWCoTaskIdGen”。
-
效果不太好 :) 我会将示例添加到上面的原始问题中。
-
您使用的是什么 JDBC 驱动程序? JTDS?
标签: java sql-server stored-procedures jdbc