mysqlでもStatement,PreparedStatement,ResultSetのclose()は必要
mysql5.0の接続テストをするためにmysqlのJDBCコネクタを2.0.14から5.0.8に変更しました。
その後既存のシステムのテストをしていると、なんとOutOfMemoryErrorで落ちてしまうようになった。
どうやら2.0.14の頃はStatement,PreparedStatement,ResultSetのclose()をしなくてもGCの対象になっていたが5.0.8ではGCの対象にならないらしい。
OracleのJDBCはもともときちんとclose()しないと同じようにOutOfMemoryErrorで落ちていて過去の自分も悪態ついてましたが、やっぱり自分でclose()するべきなんだなと反省。
public void hogehoge() throws SQLException{
PreparedStatement ps = null;
ResultSet rs = null;
try{
//DBへのアクセス処理(割愛)
}
finally{
if(rs != null){
rs.close();
}
if(ps != null){
ps.close();
}
}
}
こうやって最後に必ずclose()するようにしました。