当前位置:  技术问答>java相关

为什么这样同一个Bean对不同的数据库会出现不同现象呢?!!(高分求解)

    来源: 互联网  发布时间:2015-03-17

    本文导语:  下面是这个Bean内的查询模块代码:Connnect是从连接池内取得的不存在任何问题  public ResultSet executeQry(String sql) {     rs = null;     try {       conn = poolMgr.getConnection("mysql"); //从连接池中获得Connection赋给  ...

下面是这个Bean内的查询模块代码:Connnect是从连接池内取得的不存在任何问题

 public ResultSet executeQry(String sql) {
    rs = null;
    try {
      conn = poolMgr.getConnection("mysql"); //从连接池中获得Connection赋给
      stmt = conn.createStatement();
      rs = stmt.executeQuery(sql);
      stmt.close();   //  特别注意这么一句-------------------,
/**加入这么一句话对数据库MySQL是可行的,但换成Oracle运行时就出错:“javax.servlet.ServletException: 关闭的语句: next”  */
      poolMgr.freeConnection("mysql",conn); //释放conn返还连接池
    }
    catch (SQLException e) {
    }
    return rs;
  }

问题:为什么这样同一个Bean对不同的数据库会出现不同现象呢????
1。 按照JDK文档的说明,当关闭Statement时会自动关闭ResultSet的,如果是这样的话,那说明使用Oracle时出错时正常的。
2. 但是为什么当使用MySQL时,却会一点问题都没有,而且很正常啊!!奇怪
3. 这难道与数据库驱动程序支持的JDBC版本不一样有关系?(注:两种连接方式都是使用相应厂商提供的纯JDBC驱动程序)



|
确实不同。
sun只是制定的jdbc的规范,具体实现还是由各个厂商自己做的。
所以,同一数据库的不同驱动是绝对不同的。
另外,oracle的驱动还分oci和thin的,如果有客户端,建议使用oci,感觉毛病少点。

|
这样的写法好像有毛病,如果出exception的时候,最好把connection和statement 释放掉,我自己的写法是,在finally中,把connection释放,这样,就可以避免在某些数据库下,resultset和connection释放先后顺序而导致的问题。

请指教

|
MySql的JDBC驱动是不太完善。

我在程序中不小心把statement关闭以后在stmt.excuteQuery(),结果MySql抛出一
个Runtime(用catch(SQLException)捕捉不到的)的Exception,告诉我空指针错误,
弄得我莫名其妙;而Sybase则给我一个SQLException,告诉我“连接已关闭”,这才
让我找到了BUG。

|
按照JDK文档的说明,当关闭Statement时会自动关闭ResultSet的.这个是肯定没错的,所以oracle 报的错是对的,原因是在于mysql的jdbc。这段程序如果用在sybase上一定也会报这个错误。要么,您可以写一个专门释放connection 和statement的function,通过调用这个function来释放掉连接,最好在有一个建立连接的function,这样只用调用一次,就可以建立连接,不然您每次在调用executeQry(String sql) 时都要建一个连接,这样会影响访问速度的,而且如果不及时释放可能会出现连接被占满的情况。

|
我用的是     CallableStatement 
连结 oracle, 关闭 CallableStatement 后使用 ResultSet 没有问题。
当然 connection 是不能 close 的.

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Bean的作用域及Spring 暴露 Bean实例的方法介绍
  • 为什么一个bean实例花自己写的另外bean时,编译提示无法识别这个bean?
  • java中Spring框架介绍及如何实现对Bean的管理
  • 商业逻辑应该放在entity bean里还是session bean里比较好
  • (tomcat不认dom编译器 急死了)jsp问题:在bean加main方法,bean好用,在jsp中引用bean中出错
  • 多个用户同时使用bean,bean中的变量和方法会不会冲突?
  • 会话Bean与实体Bean的选择
  • 请问session bean和实体bean的区别
  • entity Bean 和session bean 的问题(有分)
  • 寻求方案:sessionless bean怎样包装、调用entity bean操作数据库?
  • 再问session bean 调用entity Bean的问题
  • jsp连bean 为什么连不上呢,总说找不到bean?
  • 在websphere下怎么用bean??是不是指定bean路径?
  • 商业逻辑应该放在entity bean里还是session bean里比较好(前个帖子我进不去了)
  • 请问:实体BEAN和会话BEAN的区别
  • 100 送上!!!具体说说在实体bean与client间加会话bean的作用。
  • 在Seesion bean中的一个方法调用Entity Bean调用错误,在线等待!!!!!!!
  • ejb中session bean 如何本地调用entity bean
  • bean编译问题:bean A连接数据库,bean B进行一些操作,A编译正常,B编译时报找不到A中的类。?????
  • 请问下,在开发EJB时,接口,home,和bean的名字是不是一定要统一的??home是怎么知道该调用哪个bean呢??
  • 效率或者安全性,请谈实体BEAN和会话BEAN的设计,百分相送,不够再加……


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3