在这种情况下ResultSet和PrepareStatement是否需要关闭:
public static void main(String[] args1) throws Exception{
//通过工厂获得一个c3p0管理的连接
Connection conn = ConnectionFactory.getConnection();
//传入方法
unclosePreparedStatementAndResultSet(conn);
//释放连接
conn.close();
}
public static void unclosePreparedStatementAndResultSet(Connection conn) throws SQLException{
String sql="select * from student";
PreparedStatement ps =conn.prepareStatement(sql);
ResultSet rs=ps.executeQuery();
}
简单起见,异常就不捕获了,当程序不出错的时候,是否需要在方法中
rs.close();
ps.close();
毕竟Connection在后面会释放
问题在于,使用c3p0连接池的时候,是释放连接而不是关闭连接,那么,rs和ps是否还一直持有连接池里面的连接呢?就算垃圾回收了,也有可能存在脏连接吗?
换种说法,我Connection.close()了,rs和ps还是可以继续查询的吗?
测试了一下,c3p0连接池在你关闭Connection的时候也会关闭rs和ps,当你next会报如下错误
Exception in thread "main" java.sql.SQLRecoverableException: 关闭的 Resultset
心里还是比较模糊,有没有大神指点一下,小弟感激不尽