如何从 java 调用 MSSQL 存储过程

Posted

技术标签:

【中文标题】如何从 java 调用 MSSQL 存储过程【英文标题】:How to call a MSSQL stored procedure from java 【发布时间】:2019-02-05 14:20:22 【问题描述】:

我正在尝试从 java 调用存储过程,但在正确调用调用时遇到了一些问题。我查找了许多示例,但它们与我尝试调用的存储过程的语法不匹配。

    STORED PROCEDURE CODE
    ------------------------
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[getMgr]
    @UserID as varchar(5),
    @ModeType as char(1)
    AS
    BEGIN
    SELECT usermgrid from AllEmployees WHERE (ModeType = @ModeType AND UserID = 
    @UserID)
    END
JAVA CODE
----------------------------
    connection = getConnection();
    cs = connection.prepareCall("call lvhsp_GetManager(?, ?) ");
    cs.setString(0, someUserID);
    cs.setString(1, "0");
    ResultSet resultSet = cs.executeQuery();

我尝试了多种不同的方式调用存储过程,但仍然出现错误。

当我这样称呼它时,我得到一个:

com.microsoft.sqlserver.jdbc.SQLServerException: 索引 0 超出范围。

我认为这是因为这不是传递参数的正确方法。

我也试过用参数名称(UserID、ModeType)调用它,带和不带@,但这不起作用。

我错过了什么?

【问题讨论】:

索引从 1 开始 谢谢,我也尝试从 1 开始 - com.microsoft.sqlserver.jdbc.SQLServerException: The index 0 is out of range. 如果你从 1 开始,则没有 index 0 这样的东西 How do I execute a MS SQL Server stored procedure in java/jsp, returning table data?的可能重复 【参考方案1】:

改用以下方法:

cs.setString(1, someUserID);
cs.setString(2, "0");

【讨论】:

我之前确实尝试过。我得到同样的错误 - com.microsoft.sqlserver.jdbc.SQLServerException: The index 0 is out of range. 然后在这里查看一些推荐:***.com/questions/6113674/… 我要补充一点:确保您实际编译并部署了更改后的代码。分析在哪一行抛出了异常 - 如果它在第一行 cs.setString 中,那么您可能在部署的代码和源代码之间存在不匹配。

以上是关于如何从 java 调用 MSSQL 存储过程的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Sequelize 调用 MSSQL 存储过程?

如何从 SQL Server 2000 调用 MySQL 存储过程?

sqlalchemy 调用 mssql存储过程如何获取返回值?

mssql 存储过程调用另一个存储过程中的结果的方法分享

使用 SQL Server 2012 中的 MSSQL_Query 的 PHP 调用存储过程返回无效值

对 mssql 存储过程的金字塔中间件调用 - 无响应