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

标签 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 检索返回值吗?

最佳答案

如果你选择返回一个值,你必须这样做:

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);

关于java - 无法通过 Java 检索存储过程返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51760483/

相关文章:

mysql - 是否有 ifnull() 的替代品

java - 无法在mysql中使用spring data jpa创建表

Java日期年份计算按年份计算两天

java - 我在此代码中返回一个字符串数组,但它仍然表示此方法必须返回 String 类型的结果。为什么?

sql-server - SSIS 包 - 在 Excel 连接中保留相同的连接属性

sql - 期初和期末余额总和

java - 嵌套异常是 java.lang.IllegalStateException : Cannot convert value of type [java. lang.String] 到所需类型

java - 通用对象列表与单个通用对象的比较

java - JOptionPane.showMessageDialog 类似 System.out.printf

sql-server - 使用 RAISERROR 和 ELSE 大小写问题触发