`
tmh
  • 浏览: 12151 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于Spring中hibernate 回调方法执行普通sql语句的问题

阅读更多

代码如下

public Object execProterozoicSql(final String sql) {
  return getHibernateTemplate().execute(new HibernateCallback() {
   public Object doInHibernate(Session session)
     throws HibernateException, SQLException {         
    return session.connection().createStatement().executeQuery(sql);     
   }

  }, true);
 }

我的目的是执行普通的sql语句但是当我调用这个函数的返回对象ResultSet的时候它提示我

java.sql.SQLException: Operation not allowed after ResultSet closed
 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
 at com.mysql.jdbc.ResultSet.checkClosed(ResultSet.java:644)
 at com.mysql.jdbc.ResultSet.next(ResultSet.java:6674)
 at org.apache.commons.dbcp.DelegatingResultSet.next(DelegatingResultSet.java:168)
 at tmh.tvs.bussines.Login.log(Login.java:30)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:129)
 at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:63)
 at javax.faces.component.UICommand.broadcast(UICommand.java:106)
 at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:94)
 at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:168)
 at org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:343)
 at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
 at javax.faces.webapp.FacesServlet.service(FacesServlet.java:137)
 at org.apache.myfaces.webapp.MyFacesServlet.service(MyFacesServlet.java:74)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
 at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
 at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
 at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
 at java.lang.Thread.run(Thread.java:595)

调用代码如下

ResultSet result=(ResultSet)dm.execProterozoicSql("Select * from systemgn");
   try {
    while(result.next()){
     result.getString("gname");
    }
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

 

分享到:
评论
2 楼 tmh 2007-02-25  
解决了!自己做了个类把结果集保存到一个list中一切都好了!感谢hibernate 源程序!开始学习的时候感觉学的没用可是现在才知道基础很重要!
1 楼 tmh 2007-02-24  
大家好,请教一个问题,不知道为啥我的在hibernate的回调方法中返回一个java.sql.ResultSet并调用他的时候老是出现
java.sql.SQLException: Operation not allowed after ResultSet closed,后来看了看ResultSet的实现类的时候发现每个数据操作方法中首先要执行一个checkclose()方法。这里我也明白这个数据库连接的生命周期仅仅是在回调方法中!可是我想要返回一个类似java.sql.ResultSet结果集不知该咋做。

相关推荐

    Spring + Hibernate + Spring mvc +Ajax 整合

    Hibernate是一个对象关系映射(ORM)框架,它允许开发者使用Java对象来操作数据库,而无需直接编写SQL语句。通过Hibernate,开发者可以将数据库操作与业务逻辑分离,提高代码的可维护性和可复用性。 Spring与...

    spring + spring mvc + hibernate + mysql 整合开发任务流程后台管理系统

    Spring MVC通过DispatcherServlet、Controller、Model-View-Controller模式以及一系列的回调方法来组织和管理业务逻辑。 接着,Hibernate是一个强大的对象关系映射(ORM)框架,它可以将数据库中的表与Java类映射,...

    Spring4 整合SpringMVC, Hibernate5, SpringSecurity4.2 源码

    Hibernate5引入了新的特性,如实体生命周期回调、多租户支持、更好的JPA兼容性等,提高了开发效率和数据库操作的灵活性。 Spring Security4.2是Spring框架的安全模块,它提供了全面的身份验证、授权和安全控制功能...

    struts2+hibernate+spring三大框架知识点笔记

    4. **Bean管理**:Spring容器负责创建、初始化和管理Bean,支持各种生命周期回调方法。 5. **数据访问支持**:Spring整合了多种数据访问技术,包括JDBC、Hibernate、MyBatis等,简化数据库操作。 **整合Struts2、...

    Spring对DAO的支持.doc

    - **HibernateCallback**:定义了一个回调接口,允许在事务内部执行自定义的Hibernate操作。 通过使用HibernateTemplate,开发者可以专注于业务逻辑,而无需关注底层的SessionFactory和Session管理。 总结来说,...

    Spring-Reference_zh_CN(Spring中文参考手册)

    11.2.6. 执行SQL语句 11.2.7. 执行查询 11.2.8. 更新数据库 11.3. 控制数据库连接 11.3.1. DataSourceUtils类 11.3.2. SmartDataSource接口 11.3.3. AbstractDataSource类 11.3.4. SingleConnectionDataSource类 ...

    SpringMVC+hibernate+Spring框架

    4. 容器:管理Bean的生命周期和依赖关系,提供初始化、销毁等回调方法。 5. 多种数据源支持:不仅限于JDBC,还可以集成其他ORM框架如Hibernate。 6. 集成其他框架:SpringMVC和MyBatis等,构建完整的应用解决方案。 ...

    对IBatis分页的改进,使ibatis支持hibernate式的物理分页.doc

    物理分页是直接在SQL语句中添加LIMIT或OFFSET等关键字,利用数据库自身的分页功能,减少了数据处理的量,提高了查询速度。Hibernate框架就采用了这种策略,其分页效率相对较高。 针对iBatis的这一局限,我们可以...

    Spring中文帮助文档

    11.2.6. 执行SQL语句 11.2.7. 执行查询 11.2.8. 更新数据库 11.2.9. 获取自动生成的主键 11.3. 控制数据库连接 11.3.1. DataSourceUtils类 11.3.2. SmartDataSource接口 11.3.3. AbstractDataSource类 ...

    Spring数据访问模板化方法

    例如,使用JdbcTemplate时,我们可以简单地调用`update()`或`query()`方法,并提供SQL语句和回调函数来处理结果,其他的通用部分已经由模板方法处理。 此外,Spring还提供了其他数据访问模板,如HibernateTemplate...

    hibernate-release-4.2.8.Final.zip

    3. **实体生命周期管理**:Hibernate 支持实体的生命周期管理,包括瞬态、持久态、托管态和游离态四种状态,提供了丰富的回调方法,便于开发者进行业务逻辑处理。 4. **注解驱动的配置**:此版本鼓励使用注解来代替...

    hibernate-JPA

    - **生命周期事件**:允许在实体状态改变时触发回调方法。 - **事务管理**:与实体操作相关的事务控制。 ### Hibernate Hibernate 是一个流行的开源 ORM 框架,也是 JPA 的实现之一。它可以作为 JPA 提供者,意味...

    Hibernate开发指南01

    Hibernate作为Java领域中的重要工具,极大地简化了数据库应用的开发,通过它,开发者可以将Java对象与数据库表之间的映射关系进行抽象,从而避免直接编写SQL语句,提高开发效率。 本指南的核心内容可能包括以下几个...

    Hibernate框架搭建及数据库相关操作

    7. **实体生命周期**:Hibernate 提供了预加载、加载、持久化、更新、删除、脱管等状态以及相应的回调方法。 通过这个基础教程,你可以了解 Hibernate 框架的基本用法,但要成为 Hibernate 高手,还需要深入学习其...

    hibernate3.2

    11. **实体生命周期**:Hibernate定义了几个生命周期回调方法,如`@PrePersist`、`@PostLoad`等,开发者可以在这些方法中添加自己的业务逻辑。 总的来说,Hibernate 3.2作为SSH框架的一部分,它的出现简化了Java ...

    Spring的DAO

    例如,在Spring中,`JdbcTemplate`提供了一种简单的方式来执行SQL语句,无需手动管理数据库连接和Statement对象。以下是一个简单的`JdbcTemplate`的使用示例: ```java public class StudentDaoJdbc implements ...

    HbernateTemplate的使用.pdf

    HibernateTemplate支持`HibernateCallback`接口,允许在回调方法中执行自定义的Hibernate操作。这提供了一种方式在事务内部执行复杂操作,例如批量处理或自定义查询。开发者可以在实现`doInHibernate(Session ...

    Spring 2.0 开发参考手册

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...

    spring学习的第三天

    - 封装了JDBC的核心API,如获取连接、创建语句、执行SQL等,大大简化了开发人员的工作量。 - 自动处理资源的释放及异常的转换。 - 提供了丰富的查询方法,如`query`、`update`等,以及多种回调函数,如`...

Global site tag (gtag.js) - Google Analytics