【问题标题】:How to call a MSSQL stored procedure from java如何从 java 调用 MSSQL 存储过程
【发布时间】: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)调用它,带和不带@,但这不起作用。

我错过了什么?

【问题讨论】:

标签: java liferay mssql-jdbc


【解决方案1】:

改用以下方法:

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

【讨论】:

  • 我之前确实尝试过。我得到同样的错误 - com.microsoft.sqlserver.jdbc.SQLServerException: The index 0 is out of range.
  • 然后在这里查看一些推荐:stackoverflow.com/questions/6113674/…
  • 我要补充一点:确保您实际编译并部署了更改后的代码。分析在哪一行抛出了异常 - 如果它在第一行 cs.setString 中,那么您可能在部署的代码和源代码之间存在不匹配。
猜你喜欢
  • 2013-08-23
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
相关资源
最近更新 更多