无法通过Java检索存储过程返回值

时间:2018-08-09 06:48:39

标签: java sql-server hibernate sql-server-2008 jpa

我正在尝试通过JPA从用sql server 2008编写的存储过程中检索结果。我遇到了一种非常荒谬的情况,在这种情况下,我可以从结尾有select语句的存储过程中检索结果。在这种情况下,我可以通过调用

来检索结果
  

storedProcedureQuery.getSingleResult();

但是,如果存储过程最后包含返回值的return语句,则我将无法获得任何结果,并且同一查询将返回空指针异常。

返回值的存储过程如下:-

CREATE PROCEDURE callSP
    @value int
    AS
BEGIN
    SET NOCOUNT ON;
    select 1;
END
GO

引起错误的存储过程如下所示:-

CREATE PROCEDURE callSP
    @value int
    AS
BEGIN
    SET NOCOUNT ON;
    RETURN 1;
END
GO

还有其他方法可以通过JPA检索返回值吗?

1 个答案:

答案 0 :(得分:1)

如果选择返回值,则必须执行以下操作:

CallableStatement storedProcedureQuery = con.prepareCall("{? = call my_procedure (?,?)}"); 

storedProcedureQuery.execute();
int groupId = cs.getInt(1);`

但是,如果返回ResultSet,则必须这样做:

ResultSet rs = storedProcedureQuery.executeQuery();
if (rs.next())
    int groupId = rs.getInt(1);