データベースにログメッセージを書き込むクラスがあるとします。このクラスはコードのさまざまな部分から呼び出され、同じINSERT文を繰り返し実行します。 PreparedStatementを使用するよう呼びかけているようです。PreparedStatementの正しい使い方
しかし、私はそれの正しい使い方が不思議です。メソッドを呼び出すたびに新しいPreparedStatementを作成した場合でも、クラスメンバーとしてPreparedStatementを保持し、決して閉じる必要はない場合でも、実行するたびに同じ実行パスを使用するDBMSのように、DBMSを使用する利点はありますかそれを再利用して利益を得るためには?
このシナリオでPreparedStatementを使用して利益を得る唯一の方法は、クラスメンバーとして開かれた状態を維持することだけです。同じ接続でPreparedStatementの異なるクエリを同時に開くことができますか?これらのPreparedStatementのうちの2つが同時に実行されるとどうなりますか? JDBCドライバはPreparedStatementの実行を待ち行列に入れていますか?
ありがとうございます。 Dani。
これは、使用しているDBMSによって異なります。いくつかは(自動的に)実行プランをキャッシュします。ドライバーの中には計画をキャッシュしていないものもあります。 –
ミドルウェアは、前のコメントに加えて、ステートメントもキャッシングすることができます(アプリケーションサーバーなど)。 –
JDBC接続は一般にスレッドセーフではないため、同じ接続上で同時に(異なるスレッドから)2つのPreparedStatementを実行しないでください。試してみると奇妙なエラーが発生します。 – Jesper