>

2010年1月20日水曜日

DBにアクセスする時のJavaコード

DBに接続するときは最終的に欲しい値(下の例の場合はsysdate)の変数宣言をconn, st, rsの変数宣言の手前で行う。conn, st, rsはDB接続のためのtry/catch/finally節が生み出すスコープのみで有効なのに対してsysdateはそのスコープよりも外で使用されることになるので。

closeのときにcatchした例外はその場で適当にログ出力してthrowしない。ここで例外が発生した場合は既に一つ前のcatch節にも入っている可能性が極めて高く、そちらでcatchした例外の方が有用な情報を持っている可能性が微かに高そうなので。まあこれはケースバイケースかも。

Date sysdate = null;

Connection conn = null;
Statement st = null;
ResultSet rs = null;
try{
conn = DriverManager.getConnection (url, user, pass);
st = con.createStatement();
rt = smt.executeQuery("select SYSDATE from DUAL");

sysdate = rs.getDate("SYSDATE");
}catch(SQLException e){
throw new MyException(e);
}finally{
try{
if(rs != null) rs.close();
if(st != null) st.close();
if(conn != null) conn.close();
}catch(SQLException e){
logger.error(e);
}
}

0 件のコメント: