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

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

表名称:TBL_EMPLOYEES

**Procedure :**

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


java - 使用hibernate-ResultSet调用Oracle Procedure仅返回第一行数据剩余g缺少行数据-LMLPHP

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:
苏里亚

请帮助我解决此问题。或其他任何方式从休眠状态预存存储过程。

最佳答案

在此处更改代码:

OLD:

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


新:

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


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

07-24 14:56
查看更多