2007年11月19日月曜日

ResultSet の close

データソースによる接続で 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 件のコメント: