Java 在Hibernate中获取JDBC结果集
如何使用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()方法。另外,我尝试
所以在我的存储过程中
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使用单行查询完成。创建了临时表,使用了视图,最后聚合结果并发送。在这种情况下,如何获取结果集?