次のコードスニペットのベストプラクティスは何ですか、私はexecuteQueryがそれぞれの 'if'内で実行されるたびにすべてのstmtとrsを閉じる必要がありますか? runOnSqlServerの終わりにrsとstmtを閉じ、最後にrunメソッドを閉じます。任意のポインタをありがとう!JDBC接続/結果セット/ステートメントのベストプラクティス
public void runOnSqlServer(Connection con, String[] params, String db){
try{
Statement stmt = con.createStatement();
ResultSet rs = null;
if(isVer){
rs = stmt.executeQuery(micro_verSql);
commonAct(rs, getParameter("isVer"), 1);
}
if(isInfo){
rs = stmt.executeQuery("SELECT DATABASEPROPERTYEX('"+db+"', 'COLLATION')");
commonAct(rs, getParameter("isInfo"), 1);
}
}catch(SQLException){
.....
}finally{
stmt.close();
rs.close();
}
}
public void run(CommandContext ctx) {
try{
...
runOnSqlServer(con, params, sqldb);
...
}catch(Exception ex){
}finally{
if (con != null) con.close();
}
}
男は私がexecuteQueryメソッドを呼び出し、結果セットをResultSet obj、つまりrsに割り当てるたびに、別の新しいクエリ実行結果によって割り当てられる前にこのrsを閉じる必要があると教えてくれました。 – Even
もしあなたがそれを再初期化しているなら、GCがそれをピックアップするまで開いたままにすることができるので、閉じてください。しかし、あなたのコードで見たものから、あなたはそれをやっていないので、最後にそれを閉じるだけです。それは必要ではありませんが、残っている多くのものがある場合には問題が発生する可能性があります。 – RMT
@実際には、それを少し見てから、RSの2番目のif文にヌルチェックを追加するほうが良いでしょうnullでないこと。もう一度設定する前に閉じる – RMT