2013-04-12 13 views
6

ho una superclasse che hanno un java.sql.Connection. Esistono molte sottoclassi che utilizzano la connessione per eseguire selezioni.Intercept JDBC Connection

Ho bisogno di intercettare tutte le istruzioni eseguite tramite la connessione e accedere al SQL eseguita.

Come posso farlo?

risposta

9

Usa log4jdbc. Si tratta di un driver JDBC proxy che registra tutto il vostro SQL e passa lo SQL e parametri al conducente sottostante. In questo modo il codice non ha nemmeno bisogno di essere a conoscenza della registrazione, è tutto contenuto all'interno della libreria di terze parti.

La configurazione consiste principalmente nel modificare la stringa di connessione JDBC per utilizzare il proxy anziché il driver reale e comunicare a log4jdbc il vero driver JDBC. Quindi scegli le categorie di registrazione nella configurazione di log4j per sapere che tipo di cose vuoi registrare. È possibile ottenere l'SQL, le informazioni di temporizzazione, gli eventi di apertura e chiusura della connessione e il contenuto dei set di risultati.

Se si desidera una spiegazione approfondita di come funziona, vedere il libro di Jack Shirazi Java Performance Tuning. C'è un esempio esteso di creazione di un driver proxy nel capitolo su JDBC.