紧急插播:请各位高手帮忙给看看http://www.csdn.net/expert/topic/468/468174.shtmhttp://www.csdn.net/Expert/topic/468/468435.shtmhttp://www.csdn.net/Expert/topic/468/468439.shtm 

解决方案 »

  1.   

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

  2.   

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

  3.   

    谢谢axeon(阿津) smartwood(阿木) 指点。
    有空多交流,可以留下你们的QQ或mail吗
    [email protected]
    450957(要验证)
      

  4.   

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

  5.   

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

  6.   

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