2016-05-11 26 views
0

JAVA(JDBC)のexecuteUpdate文を閉じるにはどうすればいいですか?例えば閉じる().executeUpdateはどうすればいいですか?

String sql = "UPDATE. .. . .. Whatever..."; 
ResultSet rs = stmt.executeQuery(sql); 
rs.close(); 

しかし、私は更新するには、この操作を行うことができませんでした。だから私はgoogledと私はexecuteUpdateを使用する必要があることを知ったが、後に文を閉じるには?

String sql = "UPDATE. .. . .. Whatever..."; 
int rs = stmt.executeUpdate(sql); 
rs.close(); ??? <------ 

答えて

5

あなたはexecuteUpdateを閉じないでください、あなたはStatementを閉じる:

rs.close(); // Closes the ResultSet 
stmt.close(); // Closes the Statement 

通常最高try-with-resources statementとすることを行うには:

String sql = "UPDATE. .. . .. Whatever..."; 
try (
    Statement stmt = conn.createStatement(); 
    ResultSet rs = stmt.executeQuery(sql); 
) { 
    // Process results 
} 

のtry-と資源閉じますStatementResultSetの両方があります。これはJava 7(2011年)に追加されました。


サイドノート:あなたはStatementを使用してexecuteUpdate(String)を呼び出していることを示してきました。 SQLに外部ソース情報がない限り(ユーザー入力や他のシステムなどから受け取ったものは何もありません)、それは問題ありません。より一般的なケースでは、PreparedStatementを使用し、setXyzを呼び出してパラメータを設定してから、executeUpdate()(zero-argsバージョン)を呼び出します。この習慣は、SQLインジェクションからあなたを安全に保ちます。この便利なサイトに関する詳しい説明と例はhttp://bobby-tables.com/です。

+1

OPはJDK 7以降を使用しています(AutoCloseableをサポートしています)。 –

+1

@BuhakeSindi:はい、これから言及します.JDK 7以上を使用していることを願っています。 –

+1

ありがとうございます。私はstmt.executeQueryまたはUpdateを実行するたびにstmtを閉じる必要がありますか?私は最後までstmtを再利用していましたので、conn.close()を呼び出しました。 – Nicky

1

ほとんどの場合、ResultSetが結果として得られないので、ResultSetを閉じる必要はありません。

Statementを閉じるだけです。

関連する問題