在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;
}