2017-07-18 12 views
1

私は、自動コミットイベントに登録する方法があるかどうかを判断しようとしています。自動接続がJava接続で実行されたときに通知を受け取る方法は?

オブザーバーはありますか?おそらく私はオートコミットの接続や声明を飾って通知するでしょうか?飾る方法は何ですか?

私はConnection.commit()を聞いてみましたが、文の実行では呼び出されていません。

ありがとうございました。 Alik。

答えて

2

auto-commitは、各ステートメント実行の最後に暗黙のコミットがあることを意味します。私が知る限り、あなたが聞くことができるイベントはなく、誰でも内部的にConnection.commit()を呼び出すことは期待できません。自動コミットは使用しているRDBMSのスタックのどこかで、場合によってはサーバ上でも起こります。

ので、JDBCに自動コミットイベントを追加するために、あなたは、文が実行される可能性があり、すべて単一の関数を飾る、そして実行されたSQLはUPDATEINSERTまたはDELETE動詞で開始するかどうかを確認する必要があります。次のように私は過去にJDBCを飾ってきた(。基本的に、SELECT何でも)

方法は次のとおりです。

  1. すべての単一のJDBCインタフェースのコピーを作成し、そこからクラスを作成し、作成しますJDBCインタフェースへの参照を委譲する各メソッドの具体的な機能多くの検索と置換、またはそのためのマクロの記録と再生をサポートするエディタを使用してください。

  2. 独自のドライバを定義し、独自のドライバ名(「jdbcdeco」など)を使用してJDBCに登録します。

  3. 以下の規則を設定してください。ドライバの接続文字列は、"jdbcdeco:"となり、次に飾りたいドライバの接続文字列が続きます。あなたが飾るしたい接続の接続文字列が"jdbc:mysql://localhost/test"であれば、次の接続文字列を指定する必要があります:"jdbc:jdbcdeco:mysql://localhost/test"

  4. JDBCは、あなたのドライバをインスタンス化し、それはそれを"jdbcdeco:"で始まる接続文字列を渡します。 "jdbcdeco:"部分を削除し、別の接続文字列を残しておきます。この文字列は、デコレートされる実際の接続を作成するためにJDBCに再度渡すために使用します。

幸運を祈って!

0

短い答え - オートコミットで聞くために登録する方法はありません。 Mikeの答えで言及したように、カスタムコードを書くために必要なすべてのコミットを取得したい場合は、その多くの努力をしたいかどうかにかかわらず、呼び出しを行う必要があります。

もっと簡単な回避策は、あなたの接続ではAutoCommitをオフにすることですが、それはあなたが求めているものではありません:)。

関連する問題