Statement标准关闭方法

在O/R Mapper的代码中,Statement的关闭模式:

clearup的实现:

/**

 * Close database resource.

 *

 * @param conn

 * @param pstmt

 */

protected void clearup(Connection conn, PreparedStatement pstmt)

{

    if (pstmt != null)

    {

        try

        {

            pstmt.close();

        }

        catch (SQLException se)

        {

            se.printStackTrace();

        }

        pstmt = null;

    }



    if (conn != null)

    {

        try

        {

            conn.close();

        }

        catch (SQLException se)

        {

            se.printStackTrace();

        }

        conn = null;

    }

}

1.一般模式

    Connection conn = null;

PreparedStatement pstmt = null;

try

{

    conn = getConnection();

    pstmt = conn.prepareStatement(SQL);

    pstmt.setString(1, id);

    pstmt.setString(2, type);

    pstmt.executeUpdate();          

} catch (SQLException se)

{         

throw new ApplicationException(se);

} finally

{

    clearup(conn, pstmt);//有效的close了Connection;只有一个pstmt,相当于只打开了一个光标,在这里有效的close了pstmt.

}

1.在使用jdbc进行批处理的时候,注意每一次创建一个Statement,一旦无须使用,立刻关闭,因为每一次都是打开了Oracle的一个cursor.(Oracle默认最大一次打开300个,最多也

只支持1000多个)

Connection conn = null;

PreparedStatement pstmt = null;



try

{

    conn = getConnection();

    pstmt = conn.prepareStatement(SQL1);

    pstmt.setString(1, id);

    pstmt.setString(2, type);

    pstmt.executeUpdate();

    pstmt.close(); // 请立刻close当前pstmt的光标。

    pstmt = null;  // 必须使用



    pstmt = conn.propareStatement(SQL2);

   pstmt.setString(1, id);

    pstmt.setString(2, type);

    pstmt.executeUpdate();

    pstmt.close(); // 请立刻close当前pstmt的光标。


    pstmt = null;  // 必须使用

  … …

} catch (SQLException se)

{         

throw new ApplicationException(se);

   } finally

   {

       clearup(conn, pstmt); //有效的close了Connection;只有出现exception才能有效close pstmt;

}