【问题标题】:get multipulate value from stored procedure从存储过程中获取乘法值
【发布时间】:2013-04-22 19:18:45
【问题描述】:

我有这个存储过程:

ALTER PROCEDURE dbo.getRegionsInArea
    (
    @areaID int,
    @ID int OUTPUT,
    @name varchar(50) OUTPUT
    )
AS
BEGIN
    SET NOCOUNT ON
    SELECT @ID = [ID], @name = [name] FROM Region
    WHERE areaID = @areaID
    END

我想通过JDBC给它打电话。

问题

如何获取变量输出IDname 的所有值,因为存储过程会返回它们的许多值。

我尝试了什么

Connection con = Database.getConnection();
            String storedProcedure = "{call getRegionsInArea (?,?,?)}";
            CallableStatement callableStatement = null;
            try {
                callableStatement = con.prepareCall(storedProcedure);
                callableStatement.setInt(1, getID());
                callableStatement.registerOutParameter(2,
                        java.sql.Types.INTEGER);
                callableStatement.registerOutParameter(3,
                        java.sql.Types.VARCHAR);
                callableStatement.execute();
                    System.out.println("ID = " + callableStatement.getInt(2));
                    System.out.println("name = "
                            + callableStatement.getString(3));

问题

我刚刚收到IDname 的最后一个值。

请帮忙

【问题讨论】:

  • 嗨,使用 callableStatement.getResultSet() 或 callableStatement.executeQuery() 是否有任何问题,您可以省略 ID 和 Name 的输出参数,只返回查询结果而不将其存储在某些变量中。
  • @VishalVaishya 感谢您的评论,我可以使用getrestultset,但是当我使用restulsset.next() 时,我得到了空指针异常
  • 当我尝试使用executequery()时发生了同样的事情
  • 你能用Cursor试试吗?这是完整的例子。 mkyong.com/jdbc/…
  • 我会检查一下,请问我的存储过程对吗?

标签: java sql-server stored-procedures jdbc sql-server-2008-r2


【解决方案1】:

试试这个解决方案:

callableStatement = con.prepareCall(storedProcedure); 
callableStatement.setInt(1, getID()); 
callableStatement.execute(); 
ResultSet resultSet = callableStatement.getResultSet(); 
while (resultSet.next()) { 
   int returnedID = resultSet.getInt(1); 
   String returnedName = resultSet.getString(2);   
}

然后改变你的 SP 像:

ALTER PROCEDURE dbo.getRegionsInArea 
( 
@areaID int
) 
AS 
BEGIN 
SET NOCOUNT ON 
SELECT [ID],[name] FROM Region 
WHERE areaID = @areaID 
END

【讨论】:

    猜你喜欢
    • 2017-01-01
    • 2011-04-26
    • 2019-06-23
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    相关资源
    最近更新 更多