2013-04-12 13 views
6

Mam superklasę, która ma java.sql.Connection. Istnieje wiele podklas, które używają połączenia do wykonywania wyborów.Intercept JDBC Connection

Potrzebuję przechwycić wszystkie instrukcje wykonywane przez połączenie i zarejestrować wykonane SQL.

Jak mogę to zrobić?

Odpowiedz

9

Użyj log4jdbc. Jest to pośredniczący sterownik JDBC, który rejestruje cały twój SQL i przekazuje SQL i parametry do sterownika bazowego. W ten sposób Twój kod nie musi nawet znać rejestru, wszystko to znajduje się w bibliotece innej firmy.

Konfiguracja polega głównie na zmianie ciągu połączenia JDBC w celu użycia serwera proxy zamiast na rzeczywistym sterowniku, a także informowania log4jdbc, jaki jest prawdziwy sterownik JDBC. Następnie wybierasz kategorie rejestrowania w konfiguracji log4j, aby określić, jakie rzeczy chcesz logować. Możesz uzyskać SQL, informacje o taktowaniu, o otwarciu i zamknięciu połączenia oraz zawartości zestawu wyników.

Jeśli chcesz uzyskać szczegółowe wyjaśnienie, jak to działa, zobacz książkę Jacka Shiraziego: Java Performance Tuning. Istnieje obszerny przykład budowania sterownika proxy w rozdziale o JDBC.