错误案例
public class ReleaseRes { public void releaseDB () { Connection conn = null; APLResultSet rs = null; String sql= ""; try { conn = DB.getConnection(); rs = DB.query(sql); if (rs.next()) { return rs.getString("currentdate"); } else { return DateTool.getCurrentDate(pattern); } Conn.close(); //错误1 } catch (DBException e) { ................... } //错误2 } public void releaseIO (File file) { StringBuffer sb = null; BufferedReader in = null; try { in = new BufferedReader(new FileReader(file)); sb = new StringBuffer(); for (String line; (line = in.readLine()) != null;) { sb.append(line + "\r\n"); } } catch (IOException ex) { Throw ex; } //错误3 }
错误分析
错误1:连接没有在finally正确释放,会出现异常时导致在运行一段时间后,系统由于连接池满载而崩溃。错误2:资源APLResultSet没有正确释放错误3:IO资源没有正确释放,需要在finally中释放资源
对任何的数据库,IO等资源的操作完毕之后,都需要进行释放,假如不释放资源会被耗尽,导致系统崩溃。
正确用法
public class ReleaseRes { public void releaseDB () { Connection conn = null; ResultSet rs = null; String sql= ""; try { conn = DB.getConnection(); rs = DB.query(sql); if (rs.next()) { return rs.getString("currentdate"); } else { return DateTool.getCurrentDate(pattern); } } catch (DBException e) { ................... } finally { conn.close(); rs.close(); } } public void releaseIO (File file) { StringBuffer sb = null; BufferedReader in = null; try { in = new BufferedReader(new FileReader(file)); sb = new StringBuffer(); for (String line; (line = in.readLine()) != null;) { sb.append(line + "\r\n"); } } catch (IOException ex) { Throw ex; } finally { in.close(); } }