可保持的ResultSet正常情况下如果使用Statement执行完一个查询,又去执行另一个查询时这时候第一个查询的结果集就会被关闭,也就是说,所有的Statement的查询对应的结果集是一个,如果调用Connection的commit()方法也会关闭结果集。可保持性就是指当ResultSet的结果被提交时,是被关闭还是不被关闭。JDBC2.0和1.0提供的都是提交后ResultSet就会被关闭。不过在JDBC3.0中,我们可以设置的对象的创ResultSet是否关闭。要完成这样的ResultSet建,要使用的Statement的创建要具有三个参数,这个Statement的创建方式也就是,我所说的Statement的第三种创建方式。如下: Statement st=createStatement(int resultsetscrollable,int resultsetupdateable,int resultsetSetHoldability)ResultSet rs = st.excuteQuery(sqlStr);前两个参数和两个参数的createStatement方法中的参数是完全相同的,这里只介绍第三个参数: resultSetHoldability表示在结果集提交后结果集是否打开,取值有两个: ResultSet.HOLD_CURSORS_OVER_COMMIT:表示修改提交时,不关闭数据库。 ResultSet.CLOSE_CURSORS_AT_COMMIT:表示修改提交时ResultSet关闭。不过这种功能只是在JDBC3.0的驱动下才能成立。
但是如果采用数据持久层和业务逻辑分开来来,在DAO层生成sta和rs,那我们现在要考虑的问题是什么时候关闭sta rs 和con的问题 。DAO往Bean传递的是rs 可以在使用完成之后关闭 CON可以在Bean最后的finally{}中进行关闭 。那么sta在什么时候关闭?
正常的关闭顺序如下:
if (rs != null) rs.close();
if (sta != null) sta.close();
if (con != null) con.close();
疑问:是否设置了 ResultSet.HOLD_CURSORS_OVER_COMMIT后执行rs.close()后,还可以访问rs中的方法和数据????