当我从休眠状态调用存储过程时。结果集仅返回一行,但在数据库表中返回四行数据。
在这里,我附上了来自数据库的表和数据的详细信息。
表名称: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中调用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));
}
这是因为您没有执行循环,因此仅是第一次和一次检查条件。