Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Hibernate中获取JDBC结果集_Java_Hibernate - Fatal编程技术网

Java 在Hibernate中获取JDBC结果集

Java 在Hibernate中获取JDBC结果集,java,hibernate,Java,Hibernate,如何使用hibernate获取JDBC结果集。在一种情况下,我想调用一个存储过程,它执行一些计算并从多个表中选择一些列。 所以在我的存储过程中 selct sum(c1) as TotalVal, avg(c2) as AverageVal from .... 因此,我想在java代码中获取这些列值,并对其进行更多处理。 但是,我无法在java代码中获得过程调用的结果集 有人能告诉我怎么做吗 我正在使用Hibernate4,因此找不到session.connection()方法。另外,我尝试

如何使用hibernate获取JDBC结果集。在一种情况下,我想调用一个存储过程,它执行一些计算并从多个表中选择一些列。
所以在我的存储过程中

selct sum(c1) as TotalVal, avg(c2) as AverageVal from .... 
因此,我想在java代码中获取这些列值,并对其进行更多处理。 但是,我无法在java代码中获得过程调用的结果集

有人能告诉我怎么做吗


我正在使用Hibernate4,因此找不到
session.connection()
方法。另外,我尝试了
doWork()
,但是如何从内部类
Work

中获取结果集,doWork允许您使用Hibernate提供的连接执行任何需要的操作。下面是一个例子:

private static class MyWork implements Work {
    private List<Foo> result = new ArrayList<>();

    @Override 
    public void execute(Connection connection) throws SQLException {
        try (PreparedStatement stmt = connection.prepareStatement(...)) {
            ResultSet rs = stmt.executeQuery();
            while (rs.next()) {
                Foo foo = new Foo(rs.getString(0, rs.getInt(1));
                result.add(foo);
            }
        }
    }

    public List<Foo> getResult() {
        return result;
    }
}

...

MyWork work = new MyWork();
session.doWork(work);
List<Foo> foos = myWork.getResult();
私有静态类MyWork实现工作{
私有列表结果=新的ArrayList();
@凌驾
public void execute(连接)引发SQLException{
try(PreparedStatement stmt=connection.prepareStatement(…){
ResultSet rs=stmt.executeQuery();
while(rs.next()){
Foo-Foo=new-Foo(rs.getString(0,rs.getInt(1));
结果:添加(foo);
}
}
}
公共列表getResult(){
返回结果;
}
}
...
我的工作=新的我的工作();
会议.工作(工作);
List foos=myWork.getResult();

但是您应该使用doReturningWork(),如Jack的回答所示。

doWork允许您使用Hibernate提供的连接执行任何您想要的操作。下面是一个示例:

private static class MyWork implements Work {
    private List<Foo> result = new ArrayList<>();

    @Override 
    public void execute(Connection connection) throws SQLException {
        try (PreparedStatement stmt = connection.prepareStatement(...)) {
            ResultSet rs = stmt.executeQuery();
            while (rs.next()) {
                Foo foo = new Foo(rs.getString(0, rs.getInt(1));
                result.add(foo);
            }
        }
    }

    public List<Foo> getResult() {
        return result;
    }
}

...

MyWork work = new MyWork();
session.doWork(work);
List<Foo> foos = myWork.getResult();
私有静态类MyWork实现工作{
私有列表结果=新的ArrayList();
@凌驾
public void execute(连接)引发SQLException{
try(PreparedStatement stmt=connection.prepareStatement(…){
ResultSet rs=stmt.executeQuery();
while(rs.next()){
Foo-Foo=new-Foo(rs.getString(0,rs.getInt(1));
结果:添加(foo);
}
}
}
公共列表getResult(){
返回结果;
}
}
...
我的工作=新的我的工作();
会议.工作(工作);
List foos=myWork.getResult();
但是您应该使用doReturningWork(),如Jack的回答所示。

您可以使用
会话#doReturningWork(ReturningWork)
从JDBC调用返回所需的结果:

session.beginTransaction();
ResultObject result = session.doReturningWork(new ReturningWork<ResultObject>() {

    @Override
    public ResultObject execute(Connection conn) throws SQLException {
        // execute your SQL
        // create and return result object
    });
}
session.getTransaction().commit();

// work with ResultObject
session.beginTransaction();
resultObjectresult=session.doReturningWork(新的ReturningWork()){
@凌驾
public ResultObject execute(连接连接)引发SQLException{
//执行您的SQL
//创建并返回结果对象
});
}
session.getTransaction().commit();
//使用ResultObject
您可以直接返回JDBC结果集,但我建议将这些值存储在一个单独的对象中(这里是ResultObject),因为结果集与JDBC连接相关,JDBC连接应该保存在
execute()
方法中。

您可以使用
Session\doReturningWork(ReturningWork)
要从JDBC调用返回所需的结果:

session.beginTransaction();
ResultObject result = session.doReturningWork(new ReturningWork<ResultObject>() {

    @Override
    public ResultObject execute(Connection conn) throws SQLException {
        // execute your SQL
        // create and return result object
    });
}
session.getTransaction().commit();

// work with ResultObject
session.beginTransaction();
resultObjectresult=session.doReturningWork(新的ReturningWork()){
@凌驾
public ResultObject execute(连接连接)引发SQLException{
//执行您的SQL
//创建并返回结果对象
});
}
session.getTransaction().commit();
//使用ResultObject

您可以直接返回JDBC ResultSet,但我建议将这些值存储在单独的对象中(此处为ResultObject),因为ResultSet与JDBC连接相关,JDBC连接应该保存在
execute()
方法中。

请发布用于与数据库通信的代码(调用过程).Hibernate是一个
持久化
-框架,您可以在其中
保存
。而不是一个“只读框架”。您可以通过使用
视图来伪造它,这些视图由无状态的hibernate会话读取,但hibernate在保存到这些视图时将致命崩溃。我谨建议不要使用hibernate。是的,我使用hibernate是为了保存。但也可能有例外。在其中一种情况下,我必须生成一个报告,而不能e使用单行查询完成。创建了临时表,使用了视图,并最终聚合结果并发送。在这种情况下,如何获取结果集?请发布用于与数据库通信的代码(调用过程)。Hibernate是一个
持久性
-框架,您可以
保存
。而不是“只读框架"。您可以通过使用
视图来伪造它,这些视图由无状态的hibernate会话读取,但hibernate在保存到这些视图时将致命崩溃。我谨建议不要使用hibernate。是的,我使用hibernate是为了保存。但也可能有例外。在其中一种情况下,我必须生成一个报告,而不能e使用单行查询完成。创建了临时表,使用了视图,最后聚合结果并发送。在这种情况下,如何获取结果集?