4

私たちのコード ベースで findbugs を実行したところ、まだクローズする必要があるステートメントがあと 2 つあることが指摘されました。コードのこのセクションでは、次を実行します。

preparedStatement = connection.prepareStatement(query);

3 つの異なるクエリに対して、preparedStatement を再利用します。finally ブロックでは、リソースを閉じます。

finally{
   try{
      if (resultSet != null) 
         resultSet.close();
   } catch (Exception e) {
      exceptionHandler.ignore(e);
   }
   try {
      if (preparedStatement != null) 
         preparedStatement.close();
   } catch(Exception e) {
      exceptionHandler.ignore(e);
   }

次の connection.prepareStatement(query) の前にステートメントを閉じる必要があります。それとも、このfindbugsは慎重ですか?

4

1 に答える 1

9

はい、次の connection.prepareStatement を実行する前にステートメントを閉じる必要があります。そうしないと、クローズされていない前のものへの参照が失われます (別名、ステートメントのリーク)。各ステートメント use を try {} finally {} で囲み、finally で閉じます。

于 2009-06-19T14:08:24.333 に答える