Kann ich die vollständige Abfrage erhalten, die ein PreparedStatement ausführt? [Duplikat]

8

Ich arbeite mit PreparedStatement mit MySQL Server.

Beispiel:

%Vor%

Wie kann ich die vollständige SQL-Abfrage erhalten, die auf dem MySQL-Server ausgeführt wird?

Danke!

    
ufk 14.06.2010, 15:32
quelle

6 Antworten

11

Es ist nicht von der JDBC-Spezifikation vorgeschrieben, aber einige JDBC-Treiber lassen die toString von PreparedStatement die Abfrage, die ausgeführt wird, zurückgeben, und MySQL Connector / J hat dieses Verhalten (oder zumindest vor ein paar Jahren).

%Vor%     
gustafc 14.06.2010, 15:49
quelle
4
___ qstnhdr ___ Kann ich die vollständige Abfrage erhalten, die ein PreparedStatement ausführt? [Duplikat] ___ answer3038656 ___

Es ist nicht von der JDBC-Spezifikation vorgeschrieben, aber einige JDBC-Treiber lassen die %code% von %code% die Abfrage, die ausgeführt wird, zurückgeben, und MySQL Connector / J hat dieses Verhalten (oder zumindest vor ein paar Jahren).

%Vor%     
___ answer41114524 ___

Hi Ich implementiere den folgenden Code, der SQL von PreparedStatement holt. Keine Notwendigkeit, ein Glas und Treiber zu verwenden.

%Vor%     
___ answer3038558 ___

Ich kann dir sagen, was es ist. Wenn Sie MySQL 4.1 oder neuer mit Connector / J 3.1 oder neuer verwenden, wird es etwa so aussehen:

%Vor%

Dies liegt daran, dass MySQL serverseitige vorbereitete Anweisungen .

(Wahrscheinlicher verwendet es das binäre Protokoll, aber dieser Code dient nur dazu, einen Punkt zu machen)

    
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ tag123mysql ___ MySQL ist ein freies, relationales Datenbank-Managementsystem (RDBMS), das die strukturierte Abfragesprache (SQL) verwendet. Verwenden Sie dieses Tag NICHT für andere DBs wie SQL Server, SQLite usw. Dies sind verschiedene DBs, die alle SQL verwenden, um die Daten zu verwalten. ___ answer45730240 ___

Etwas andere Annäherung von allen Antworten hier,

Wenn Sie mit den Debugging-Optionen in Eclipse vertraut sind. Sie können Folgendes versuchen:

  1. Legen Sie einen Haltepunkt bei %code%

  2. fest
  3. Klicken Sie mit der rechten Maustaste auf Ihre Anwendung, sagen Sie %code% select %code% (oder Was auch immer in Ihrem Fall anwendbar ist, z. B. SpringBoot App etc.

  4. Führen Sie den Schritt aus, der Sie zum in der Frage erwähnten Code führt.

  5. Wenn Sie %code% in %code% von Eclipse überprüfen, finden Sie Variablen wie %code% , %code% (entsprechend Ihrem Code)

  6. Was immer Sie als Wert von %code% sehen, wäre die vollständige SQL-Abfrage, die Sie benötigen.

Auch wenn Sie diese Variable nicht immer ansehen möchten, können Sie %code% versuchen und Ihre vollständige SQL-Abfrage in Logs drucken.

    
___ tag123preparedstatement ___ Eine vorbereitete Anweisung (oder eine parametrisierte Anweisung) ist eine vorkompilierte SQL-Anweisung, die dazu dient, die Leistung zu verbessern und SQL-Injection-Angriffe zu verringern. Vorbereitete Anweisungen werden in vielen gängigen relationalen Datenbankverwaltungssystemen verwendet. ___ answer3038553 ___

Sie können nicht, da Java nicht dafür verantwortlich ist, es zu konstruieren. Vorbereitete Anweisungen werden in MySQL unterstützt, daher sendet Java das tatsächlich parametrisierte SQL ("ID des Benutzers mit Name =?") Direkt an MySQL zusammen mit den Parametern

    
___ qstntxt ___

Ich arbeite mit %code% mit MySQL Server.

Beispiel:

%Vor%

Wie kann ich die vollständige SQL-Abfrage erhalten, die auf dem MySQL-Server ausgeführt wird?

Danke!

    
___
krock 14.06.2010 15:37
quelle
3

Sie können nicht, da Java nicht dafür verantwortlich ist, es zu konstruieren. Vorbereitete Anweisungen werden in MySQL unterstützt, daher sendet Java das tatsächlich parametrisierte SQL ("ID des Benutzers mit Name =?") Direkt an MySQL zusammen mit den Parametern

    
Michael Mrozek 14.06.2010 15:35
quelle
3

Ich kann dir sagen, was es ist. Wenn Sie MySQL 4.1 oder neuer mit Connector / J 3.1 oder neuer verwenden, wird es etwa so aussehen:

%Vor%

Dies liegt daran, dass MySQL serverseitige vorbereitete Anweisungen .

(Wahrscheinlicher verwendet es das binäre Protokoll, aber dieser Code dient nur dazu, einen Punkt zu machen)

    
Powerlord 14.06.2010 15:36
quelle
2

Hi Ich implementiere den folgenden Code, der SQL von PreparedStatement holt. Keine Notwendigkeit, ein Glas und Treiber zu verwenden.

%Vor%     
user3349710 13.12.2016 05:55
quelle
0

Etwas andere Annäherung von allen Antworten hier,

Wenn Sie mit den Debugging-Optionen in Eclipse vertraut sind. Sie können Folgendes versuchen:

  1. Legen Sie einen Haltepunkt bei stmt.executeQUery();

  2. fest
  3. Klicken Sie mit der rechten Maustaste auf Ihre Anwendung, sagen Sie Debug As select Java Application (oder Was auch immer in Ihrem Fall anwendbar ist, z. B. SpringBoot App etc.

  4. Führen Sie den Schritt aus, der Sie zum in der Frage erwähnten Code führt.

  5. Wenn Sie Variables tab in Debug Perspective von Eclipse überprüfen, finden Sie Variablen wie myQuery , stmt (entsprechend Ihrem Code)

  6. Was immer Sie als Wert von stmt sehen, wäre die vollständige SQL-Abfrage, die Sie benötigen.

Auch wenn Sie diese Variable nicht immer ansehen möchten, können Sie Java Logging versuchen und Ihre vollständige SQL-Abfrage in Logs drucken.

    
rdj7 17.08.2017 08:35
quelle

Tags und Links