7

SQLデータベースで複数の連続したexecuteUpdate()メソッドを使用することはどれほど安全ですか?

2つのステートメントを検討します。

st.executeUpdate("INSERT table SELECT col1,col2 FROM table WHERE ID=" +var_id);
st.executeUpdate("DELETE FROM table WHERE ID=" +var_id);

彼らはどのように振る舞いますか?2番目のステートメントは1番目のステートメントの完了を待機しますか、それとも戻り値(影響を受ける行数)を確認し、それに応じて2番目のステートメントで動作する必要がありますか?

4

3 に答える 3

6

toの呼び出しexecuteUpdateは非同期ではないため、サーバーでステートメントが実行されるまで戻りません。言い換えると、これら2つのステートメントは機能し、次々に実行されるため干渉しません。

于 2012-07-10T15:50:29.387 に答える
1

ステートメントが単一のインスタンス であると同時に複数のクエリを実行できるとは思いません。

2番目のステートメントは、最初のステートメントが完了するまで待機し、を返します。
2番目のステートメントは、最初のステートメントの完了後にのみ新しいクエリで設定されます。

これは、ResultSetを読み取る場合にも当てはまります。
ドキュメントによると:

デフォルトでは、Statementオブジェクトごとに1つのResultSetオブジェクトのみを同時に開くことができます。したがって、あるResultSetオブジェクトの読み取りが別のオブジェクトの読み取りとインターリーブされている場合、それぞれが異なるStatementオブジェクトによって生成されている必要があります。Statementインターフェースのすべての実行メソッドは、開いているオブジェクトが存在する場合、ステートメントの現在のResultSetオブジェクトを暗黙的に閉じます。

于 2012-07-10T15:39:08.987 に答える
0

答えは、データベースの自動コミットがオンになっているかどうかによって異なります。

自動コミットをオンにしている場合、2番目のステートメントは、最初のステートメントが完了するのを待ってから、実行する前にコミットします。

自動コミットをオフにしている場合、2番目のステートメントは最初のステートメントの後に実行されますが、コミットされるまでデータベースに変更は適用されません。

于 2012-07-10T15:42:24.590 に答える