2012-02-08 1 views
4

Я использую HSQLDB в своем приложении. Теперь мне нужно зарегистрировать каждый выполненный sql-оператор. Я не хочу самостоятельно обрабатывать SQL-протоколирование. Есть ли стандартный способ сделать это изнутри HSQLDB?протоколирование SQL-выражений изнутри HSQLDB

ответ

8

HSQLDB 2.2.x поддерживает ведение журнала SQL. Предположим, что ваша база данных называется test и Вы подключаетесь, используя URL JDBC jdbc:hsqldb:file:test

  1. test.log является журнал изменений данных используется внутри HSQLDB. Он не содержит операторов SELECT. Он создается и удаляется HSQLDB. Это не то, что вы ищете.

  2. test.sql.log - это журнал, содержащий все операторы SQL с информацией о времени и сеансе, а также любые аргументы для подготовленных операторов. Этот журнал создан при использовании:

    SET DATABASE СОБЫТИЙ SQL LEVEL 3

Он содержит такие элементы, как эти:

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 на URL

  1. test.sql.app.log - это журнал, содержащий записи для внутренних операций сохранения. Это не связано с исполняемыми операциями SQL.

смотрите руководство здесь и проверить синтаксис команды и свойства в конце главы:

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

+0

Если моя база данных зашифрована, существует ли стандартный способ включения шифрования SQL-журнала? –

+0

Нет, но для этого легко изменить источник. См. Класс org.hsqldb.lib.SimpleLog. – fredt

+0

спасибо большое !! '' SET DATABASE EVENT LOG SQL LEVEL 3'' работает как шарм! – Zarathustra

1

Не определен HSQLDB, но если ваш клиент использует JDBC, возможно, самым простым способом регистрации SQL-операторов является использование оболочки драйвера JDBC. Есть много implementations на выбор.

+0

Я рассматриваю такого рода решения, но моя цель состоит в том, чтобы избежать введения новых libraies в мой проект. –

+0

ОК. Я использовал только для написания аспектов для JDBC Connection/Statement/PreparedStatement для аналогичной цели и для их подключения через Spring Interceptors, если вы используете Sprint. Это всего лишь несколько классов, и на самом деле это не так сложно. – maximdim

+0

На самом деле этот проект для меня большой, чтобы все понять. Мы используем Spring, но у меня нет опыта в этом. Весенний код был написан кем-то другим. И у меня нет времени учиться сейчас. Мы также используем Hibernate и Log4J. Мое самое близкое предположение, как решить мою задачу - включить ведение журнала SQL и параметров, а затем перенаправить этот журнал в файл назначения. –

Смежные вопросы