2013-03-21 13 views
12

Quando creiamo un PreparedStatement usiamo "?" i caratteri verranno quindi sostituiti dai parametri impostati.Come vedere la stringa SQL di PreparedStatement?

Come possiamo vedere la stringa SQL finale dopo aver impostato questi parametri?

+0

Vedere: [Come posso ottenere l'SQL di un PreparedStatement?] (Http://stackoverflow.com/questions/2382532/how-can-i-get-the-sql-of-a-preparedstatement) – Reimeus

risposta

5

Il modo più semplice (che funziona con qualsiasi driver JDBC) è utilizzare log4jdbc. È un proxy che avvolge il driver, crea una stringa SQL leggibile combinando l'SQL ei suoi parametri e lo registra, quindi passa SQL e i parametri sul driver sottostante.

11

Non esiste una stringa SQL finale, la versione con segnaposti è ciò che viene effettivamente inviato al server. I dati vengono inviati completamente separatamente da esso mentre si eseguono query sull'istruzione preparata.

È possibile registrare la stringa con segnaposto e quindi ogni set di dati singolarmente.

Il vostro codice potrebbe combinarle nel registro per una stringa SQL effettiva se è questo ciò che si vuole:

String query = "SELECT a FROM b WHERE c = ?"; 

... 

pstmt.setString(1, "asd"); 
logSQL(query, "asd"); 

logSQL sarebbe poi effettivamente il login "SELECT a FROM b WHERE c = 'asd'". Could be that someone has actually implemented this before...

Problemi correlati