7

私のアプリケーションでは、MySQLデータベースに挿入しようとしている複数のスレッドあります。

4

3 に答える 3

6

メソッド自体はスレッド セーフである可能性がありますがexecuteUpdate、準備済みステートメントは同時に使用するようには設計されていません。これはexecuteUpdate、パラメータを MySQL に送信するように指示するまで、各インスタンスがパラメータを保存するためです。さらに、トランザクションはConnectionオブジェクトを介して管理されるため、同期せずに同時に接続を共有すると、コミット/ロールバックで望ましくない動作が発生する可能性があります。

複数のスレッドからの挿入を同時に機能させるには、各スレッドが独自の を使用し、独自Connectionの を作成する必要がありますPreparedStatement。同時実行性は RDBMS 側で管理されるため、同じデータベースで複数のプリペアド ステートメントを同時に使用することはスレッド セーフです。

于 2013-03-14T06:01:33.193 に答える
2

Javadocには、Connection,aPreparedStatement,またはaのいずれかResultSetがスレッドセーフであるとは書かれていないため、どちらのメソッドもスレッドセーフではありません。

于 2013-03-14T06:10:04.090 に答える
0

executeUpdate()複数のスレッドに使用するのはスレッドセーフではありません。

各スレッドがデータベースへの独自の JDBC 接続を使用するように、複数の接続を作成できます。

于 2013-03-14T06:22:33.803 に答える