gpt4 book ai didi

java - 使用 hibernate-ResultSet 调用 Oracle 过程 仅返回第一行数据 剩余行数据丢失

转载 作者:行者123 更新时间:2023-12-01 10:40:48 27 4
gpt4 key购买 nike

当我从 hibernate 状态调用存储过程时。结果集只返回一行,但数据库表中有四行数据。

这里我附上了来自数据库的表和数据的详细信息。

表名称:TBL_EMPLOYEES

**Procedure :**

create or replace PROCEDURE "SP_GET_EMPLOYEES" (
ecur OUT sys_refcursor)
AS
BEGIN
OPEN ecur FOR
SELECT *FROM TBL_EMPLOYEES;
END;

PRocedure o/p in sql developer

Java代码(在Hibernate中调用Oracle存储过程)

Session session = HibernateSessionManager.getSessionFactory()
.openSession();

session.beginTransaction();
try {
session.doWork(new Work() {
public void execute(Connection connection) {

CallableStatement call;
try {
String aProcedureName="SP_GET_EMPLOYEES";
String functionCall = "{call " + aProcedureName + "(?)}";
call = connection.prepareCall( functionCall );

call.registerOutParameter(1, OracleTypes.CURSOR );
call.execute();

ResultSet rs=(ResultSet) call.getObject(1);
if(rs.next()){
System.out.println(rs.getString(1));
}


} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

// propagate this back to enclosing class
}
});

} catch (Exception e) {
e.printStackTrace();
} finally {
session.getTransaction().commit();
}

o/p:苏里亚

请帮我解决这个问题。或任何其他从 hibernate 读取 oracle 存储过程的方法。

最佳答案

在此处更改您的代码:

旧:

 if(rs.next()){
System.out.println(rs.getString(1));
}

新:

 while(rs.next()){
System.out.println(rs.getString(1));
}

这是因为您没有执行循环,您只是第一次检查条件。

关于java - 使用 hibernate-ResultSet 调用 Oracle 过程 仅返回第一行数据 剩余行数据丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34412050/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com