データソースによる接続で Connection / Statement /ResultSet を使用している場合、それぞれの close 処理を filnally ブロックで全て行うことが JNDI Datasource HOW-TO では例として示されています。
Javadoc によると ResultSet は Statement を閉じたり再実行したときなどに自動的に close されると書いてあります。人によっては ResultSet の close 処理を記述しない人もいるようです。私も冗長に思うので省略しています。ただし Statement は使い終わったらすぐに閉じるようにしています。
____
<サンプル>
下記の例では rs の close を記述していません。
Connection con = null;
PreparedStatement pst = null;
try {
Context ctx = new InitialContext();
DataSource ds =
(DataSource)ctx.lookup("java:comp/env/jdbc/sample");
con = ds.getConnection();
pst = con.prepareStatement("select * from mytable where name=?");
pst.setString(1, req.getParemeter("name"));
ResultSet rs = pst.executeQuery();
if (rs.next()) {
pst = con.prepareStatement("....");
pst.setString(...);
pst.executeUpdate();
}
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (pst != null) {pst.close();}
if (con != null) {con.close();}
} catch (SQLException e) {
e.printStackTrace();
}
}
______
0 件のコメント:
コメントを投稿