私はペット プロジェクトの 1 つのコード レビュー (主に FindBugs のようなツールを使用) を行っており、FindBugs は次のコードをエラー (疑似コード) としてマークしました。
Connection conn = dataSource.getConnection();
try{
PreparedStatement stmt = conn.prepareStatement();
//initialize the statement
stmt.execute();
ResultSet rs = stmt.getResultSet();
//get data
}finally{
conn.close();
}
エラーは、このコードがリソースを解放しない可能性があるというものでした。ResultSet と Statement が閉じられていないことがわかったので、最終的に閉じました。
finally{
try{
rs.close()
}catch(SqlException se){
//log it
}
try{
stmt.close();
}catch(SqlException se){
//log it
}
conn.close();
}
しかし、(かなりの数の企業の) 多くのプロジェクトで上記のパターンに遭遇しましたが、誰も ResultSet やステートメントを閉じていませんでした。
接続が閉じられたときに ResultSet とステートメントが閉じられないという問題がありましたか?
私はこれだけを見つけました.Oracleが接続を閉じるときにResultSetを閉じるのに問題があることを示しています(Oracle dbを使用しているため、私の修正です)。java.sql.api は Connection.close() javadoc で何も言いません。