2012-02-08 18 views
4

私のアプリケーションではHSQLDBを使用しています。今私は実行されたすべてのSQL文をログに記録する必要があります。私は自分自身でSQLログを処理する必要はありません。 HSQLDBの中でこれを行うための標準的な方法はありますか?HSQLDB内のSQL式のログ

答えて

8

HSQLDB 2.2.xはSQLロギングをサポートしています。データベースがtestという名前で、あなたがjdbc:hsqldb:file:test

  1. test.logは、HSQLDBが内部で使用するデータの変更ログであるJDBCのURLを使用して接続すると仮定します。 SELECTステートメントは含まれません。 HSQLDBによって作成され、削除されます。これはあなたが探しているものではありません。

  2. test.sql.logは、準備された文の引数と共に、時間とセッション情報を含むすべてのSQL文を含むログです。

    2012-02-08 22:19:36.484 DETAIL 4 CALL USER() 
    2012-02-08 22:19:36.484 DETAIL 4 call database_version() 
    2012-02-08 22:19:36.484 DETAIL 4 COMMIT 
    2012-02-08 22:19:36.500 DETAIL 4 INSERT INTO Customer VALUES(0,'Laura','Steel','429 Seventh Av.','Dallas') 
    

    あなたは上hsqldb.sqllog = 3を使用することができます:それはこのようなエントリが含まれている3

SET DATABASEイベントログSQLレベルを:あなたが使用している場合、このログが作成されますURL

  1. test.sql.app.logは、内部永続操作のエントリを含むログです。これは実行されたSQL文には関係しません。

ここでガイドを参照してくださいし、章の最後にコマンドとプロパティの構文をチェックします。

http://hsqldb.org/doc/2.0/guide/management-chapt.html#mtc_monitoring_operation

+0

私のデータベースが暗号化されている場合、sql-logの暗号化も有効にするための標準的な方法はありますか? –

+0

いいえ、ただし、ソースを変更するのは簡単です。 org.hsqldb.lib.SimpleLogクラスを参照してください。 – fredt

+0

ありがとう! '' SETデータベースイベントログSQLレベル3''は魅力的に機能します! – Zarathustra

1

HSQLDB固有ではありませんが、クライアントがJDBCを使用している場合、SQLステートメントを記録する最も簡単な方法は、JDBCドライバラッパーを使用することです。より多くから選択するimplementationsがあります。

+0

私はこの種のソリューションを検討しているが、私の目標は、新しいlibraiesを導入することを避けるためにあります私のプロジェクトに –

+0

OK。私は同様の目的のためにJDBC Connection/Statement/PreparedStatementのアスペクトを記述し、Sprintを使用している場合はSpringインターセプタ経由で配線しました。実際には難しいことではありません。 – maximdim

+0

実際、このプロジェクトは私にとってすべてを理解するための大きなものです。私たちは春を使っていますが、私は春を経験していません。 Springを使用するコードは、他の誰かによって書かれました。私は今学ぶ時間がありません。また、HibernateとLog4Jも使用しています。私の最も近い推測は、私の仕事を解決する方法は、SQLステートメントとパラメータのロギングをオンにし、このログを宛先ファイルにリダイレクトすることです。 –