我看到一段代码 :PreparedStatement、ResultSet和Connection。打开顺序是Connection、ResultSet 、PreparedStatement,用的是jdbc连接( JDBCDataSource.getJDBCDataSource("jdbc.informix").getConnection();)先关闭ResultSet,再关闭PreparedStatement,不关闭ResultSet,这样会不会有问题。

解决方案 »

  1.   

    分少没人来吗  ~~~~(>_<)~~~~ 
      

  2.   

    打开顺序:
    Connection
    PreparedStatement
    Result关闭顺序:
    Result
    PreparedStatement
    ConnectionPS:我认为其实关闭的时候直接关闭Connection也就行了,没事。(欢迎对这个结论拍砖)
      

  3.   

    只要关闭connection,其他的都会被关闭当然如果你在循环里用同一个connection查询处理多个结果集,那么你可能需要考虑在用完每个结果集后关闭它们
      

  4.   

    但是最好按照以下顺序关闭:rs(同一个连接有多个rs在每个就用完之后就立即close),stmt(同rs),conn
    原因如下:
    The JDBC spec requires that a Connection close any open Statement's when it is closedJDBC规范要求关闭连接的时候同时关闭任何与其关联的打开的Statement一般情况下关闭close都没问题但是,如果碰到一个不负责任的数据库连接池就不好说了连接池重写了Connection了close方法,当调用这个方法时不关闭底层连接,而是将连接放回池中。一个负责任的连接池都应该在此时将rs和stmt物理关闭,不负责任的就可能没有将rs和stmt关闭,直接将conn丢回池中,最终可能导致OutOfMemory在dbcp中重写的close方法里就passivate这样一个方法调用,就是用来关闭rs和stmt的
      

  5.   

    最好还是按照Result,PreparedStatement,Connection顺序进行关闭
      

  6.   

    五楼的说的很明白,关闭最好按顺序来,resultset preparedstatement,connection按这个顺序关闭
      

  7.   

    按要求关闭吧,我用过 Sybase 的驱动,没自己关闭 ResultSet 和 Statement 的时候还是导致连接被用尽,可能 JDBC 2.0 和 3.0 在细节上还是有点差别,我们最好是把自己应该做的事情自己做了,而不要指望自动去做,不同的实现版本可能细节不同,依赖实现细节的代码会碰到移植性的问题,而且很难查觉错误在哪里。
      

  8.   

    五楼的说的很明白,关闭最好按顺序来,resultset preparedstatement,connection按这个顺序关闭 
      

  9.   

    五楼的说的很明白,关闭最好按顺序来,resultset preparedstatement,connection按这个顺序关闭 
      

  10.   

    五楼的说的很明白,关闭最好按顺序来,resultset preparedstatement,connection按这个顺序关闭