2013-04-12 20 views
6

私はスーパークラスにjava.sql.Connectionを持っています。 selectを実行するために接続を使用する多くのサブクラスがあります。JDBC接続のインターセプト

私は接続を通して実行されたすべてのステートメントをインターセプトし、実行されたSQLを記録する必要があります。

どうすればいいですか?

答えて

9

log4jdbcを使用してください。これは、すべてのSQLを記録し、基礎となるドライバにSQLとパラメータを渡す代理JDBCドライバです。そうすれば、コードはロギングを意識する必要はなく、サードパーティのライブラリにすべて含まれています。

構成は、ほとんどの場合、実際のドライバの代わりにプロキシを使用するようにJDBC接続文字列を変更し、log4jdbcに実際のJDBCドライバが何であるかを伝えます。次に、log4j構成でログカテゴリを選択して、どのような種類のログを記録するかを指定します。 SQL、タイミング情報、接続の開始と終了のイベント、および結果セットの内容を取得できます。

詳細については、Jack Shiraziの書籍Javaパフォーマンスチューニングを参照してください。 JDBCの章でプロキシ・ドライバを構築する拡張例があります。