ひでっぷの技術メモ

はてなダイアリーから移行しました

mysqlでもStatement,PreparedStatement,ResultSetのclose()は必要

mysql5.0の接続テストをするためにmysqlJDBCコネクタを2.0.14から5.0.8に変更しました。
その後既存のシステムのテストをしていると、なんとOutOfMemoryErrorで落ちてしまうようになった。
どうやら2.0.14の頃はStatement,PreparedStatement,ResultSetのclose()をしなくてもGCの対象になっていたが5.0.8ではGCの対象にならないらしい。
OracleJDBCはもともときちんと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()するようにしました。