2013-03-21 4 views
12

Wenn wir ein PreparedStatement erstellen, verwenden wir '?' Zeichen werden dann durch eingestellte Parameter ersetzt.Wie wird die SQL-Zeichenfolge von PreparedStatement angezeigt?

Wie können wir die endgültige SQL-Zeichenfolge sehen, nachdem diese Parameter festgelegt wurden?

+0

Siehe: [Wie kann ich die SQL eines PreparedStatement erhalten?] (Http://stackoverflow.com/questions/2382532/how-can-i-get-the-sql-of-a-preparedstatement) – Reimeus

Antwort

5

Der einfachste Weg (der mit jedem JDBC-Treiber funktioniert) ist die Verwendung von log4jdbc. Es ist ein Proxy, der den Treiber umschließt, eine lesbare SQL-Zeichenfolge erstellt, indem er das SQL und seine Parameter kombiniert und protokolliert, und dann die SQL und Parameter an den zugrunde liegenden Treiber weiterleitet.

11

Es gibt keine endgültige SQL-Zeichenfolge, die Version mit Platzhaltern ist, was tatsächlich an den Server gesendet wird. Die Daten werden vollständig getrennt davon gesendet, wenn Sie Abfragen für die vorbereitete Anweisung ausführen.

Sie können die Zeichenfolge mit Platzhaltern und dann jeden Datensatz einzeln protokollieren.

Ihr Code könnte sie im Protokoll zu einer tatsächlichen SQL-Zeichenfolge kombinieren, wenn das ist, was Sie wollen:

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

... 

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

logSQL würde dann tatsächlich "SELECT a FROM b WHERE c = 'asd'" anmelden. Could be that someone has actually implemented this before...

Verwandte Themen