Preparedstatement SQL-string auslesen

Status
Nicht offen für weitere Antworten.
M

michaelarban2

Gast
hi,

ich benutze preparedstatments, um sql-befehle an eine Oracle-DB zu schicken.

Beispiel

String sql = ... blabla ... (select * from meinetabelle where name = ? )

PreparedStatement pstmt = conn.prepareStatement(sql)

pstmt.setString(1, "Otto");
... blabla blabla ...


Nun will ich nach dem ausführen den ganzen übermittelten sql-befehl select * from meinetabelle where name = "Otto" wieder haben.

pstmt.toString() funktioniert nicht, sondern leifert eine speicheradresse.

gibt es so was wie pstmt.getSQLbefehl() ?

danke
 

Kim Stebel

Bekanntes Mitglied
Debugger anwerfen, die privaten Attribute des preparedStatement angucken...insbesondere parameterValues und staticSQL. Die sind notfalls auch per Reflection zu bekommen... Ist natürlich alles nicht für den Produktiveinsatz gedacht. Wozu brauchst du das überhaupt?
 
G

Guest

Gast
hi,

ich will nur wissen, welchen SQL-String das Prepared-statememt ausführt.

Komischweise ging es, wenn ich als Datenbank MySQL verwende; liegt es vielleicht an dem jeweiligen treiber??

bye
 
T

tuxedo

Gast
Öhm, bist du dir sicher dass es mit MySQL ging? JDBC unterstützt das AFAIk nämlich nicht. Auch der MySQL Connector/J nicht.
Und die MySQL-Datenbank hat, soweit ich weiß, auch keine Technik das Statement zu rekonstruieren, da das ganze ja DB-Intern gehandhabt wird (die DB bekommt auch nur das Satement mit Platzhaltern und dann einzeln die Parameter).

wozu brauchst du die Funktion denn?

- Alex
 
G

Guest

Gast
ich brauche das ganze zu Logging-zwecken; ich will nämlich rekonstruieren, welchen SQL-Fehl durch das Prepared-statemtn an die DB geshickt worden ist.


hmmm, es muss doch einen weg geben, das zu erreichen.
 
S

SlaterB

Gast
zu welchem Zeitpunkt denn?
erstmal kannst du einfach beim Erzeugen des PS loggen, wenn du den String und die Parameter übergibst,

zweitens kannst du dir diese Daten immer für das letzte PS merken und dann im Fehlerfall im Nachhinein ausgeben,

drittens verwende eine eigene Klasse anstelle des PS und speichere dort die Daten in einer Exemplarvariablen
(nicht viel anders als zweitens, nur eine Frage der Organisation/ Nebenläufigkeit)
 
G

Guest

Gast
Ich habe 100e von Preparedstatements, die jeweils andere parameter erwarten;

der Zeitpunkt wann ein sql-Anweisung an das PS übegeben wird ist doch egal, oder?
kurz vor oder nach dem ps.execute(), will ich folgendes für Loging-zwecke:

loggeInEineDatei(ps.getMeinSQLString())
 
S

SlaterB

Gast
eben andersrum:

PS createPS(connection, String sql) {
loggeInEineDatei(sql)
return connection.createPS(sql);
}
 
T

tuxedo

Gast
Das hatte ich auch schon vorgeschlagen. Aber scheinbar prallt das einfach an ihm ab. Mit dem Kopf durch Stahlbeton is halt leider nicht möglich. Außer man kommst vom Planet Krypton ... ;-)
 
G

Guest

Gast
Den vollständigen SQL-String habe ich doch zu keinem zeitpunkt ,

also
String sql =select * from meinetabelle where name = ?

--> den sql-string kann ich hier nicht loggen, weil noch unvollständig.


PreparedStatement pstmt = conn.prepareStatement(sql)

pstmt.setString(1, "Otto"); --> erst hier ist der sql-string vollständig, oder?
 
S

SlaterB

Gast
wenn du die Parameter möchtest, dann musst du diese eben auch loggen,
entweder nach dem gleichen Verfahren wie oben in einzelnen Log-Aufrufen,
oder eben Strings zusammenbauen,
wie gesagt mit eigenem Objekt pro PS oder einer Bearbeiter-Klasse, die für das aktuelle PS erst alle Teile merkt und am Ende ausgibt
 
T

tuxedo

Gast
Anonymous hat gesagt.:
Den vollständigen SQL-String habe ich doch zu keinem zeitpunkt ,
Und genau so siehts bei der DB auch aus... Der Treiber übermittelt auch keinen vollständigen SQL-String. Sondern alles einzeln:

- Also das PS
- Dann die einzelnen Argumente

pstmt.setString(1, "Otto"); --> erst hier ist der sql-string vollständig, oder?

Falsch. Die Argumente werden auch in SQL-Statements umgewandelt. Hast du dir mal angesehen wie sowas in SQL ausschaut?

Code:
PREPARE getuser FROM 'SELECT id, username FROM `account` WHERE username = ? AND gmlevel = ?';
SET @username = 'alex';
SET @gmlevel = '3';
EXECUTE getuser USING @username, @gmlevel;
DEALLOCATE PREPARE getuser;

Erst beim "execute" baut die Datenbank INTERN alles zusammen.

Die DB bekommt also auch nie ein komplettes, ausgefülltes Statement.
Wenn du das Statement "komplett" haben willst, dann musst du dir da halt selbst was basteln. SlaterB hat's ja auch schon erklärt.

- Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kirby.exe PreparedStatement wird nicht ausgeführt Datenbankprogrammierung 5
V SQLite NullPointerException in preparedStatement.close(); Datenbankprogrammierung 8
Neumi5694 SQL-Statement Preparedstatement - try resource vs. Garbage Collector Datenbankprogrammierung 5
S JDBC PreparedStatement durchiterieren Datenbankprogrammierung 6
S CSV Datein in DB übernehmen:PreparedStatement bzw executeBatch() zu langsam Datenbankprogrammierung 11
P MySQL PreparedStatement vs. StoredProcedure vs. executeBatch Datenbankprogrammierung 1
P PreparedStatement IN-Funktion Datenbankprogrammierung 8
R PreparedStatement ohne Parameter? Datenbankprogrammierung 4
turmaline Oracle [PreparedStatement] Klammer fehlt Datenbankprogrammierung 9
C PreparedStatement und null Datenbankprogrammierung 13
J Problem bei Boolean in PreparedStatement Datenbankprogrammierung 5
M Variable in SQL SELECT * FROM ... WHERE mithilfe von PreparedStatement benutzen? Datenbankprogrammierung 28
D MySQL PreparedStatement mit c3p0 schlägt fehl. Warum? Datenbankprogrammierung 3
S Oracle Problem mit PreparedStatement.setString(1,"str") Datenbankprogrammierung 10
M MySQL preparedStatement und Anführungszeichen Datenbankprogrammierung 6
L MySQL Probleme mit PreparedStatement für SQL-Abfrage in Java Datenbankprogrammierung 2
G PreparedStatement und Transaktionen Datenbankprogrammierung 2
N Leeres Blob in ein PreparedStatement eintragen Datenbankprogrammierung 2
P PreparedStatement batch und getGeneratedKeys Datenbankprogrammierung 7
T MySQL PreparedStatement mit INSERTs langsam, Batch-Statement auch Datenbankprogrammierung 4
B H2 PreparedStatement SELECT * FROM ? Datenbankprogrammierung 4
M FindBugs und PreparedStatement aus einer Datei lesen Datenbankprogrammierung 11
Guybrush Threepwood PreparedStatement: execute() oder executeUpdate() Datenbankprogrammierung 3
R PreparedStatement mit verschiedenen Datenbanken Datenbankprogrammierung 2
R Frage zu PreparedStatement/ResultSet Datenbankprogrammierung 16
R Zugriff auf SQL im PreparedStatement Datenbankprogrammierung 4
W preparedStatement (MySQL - JDBC) Datenbankprogrammierung 5
Landei PreparedStatement Parameter mehrfach verwenden Datenbankprogrammierung 18
S Create Table mit PreparedStatement Datenbankprogrammierung 2
S Select mit PreparedStatement Datenbankprogrammierung 2
S PreparedStatement setArray(int i, java.sql.Array) Datenbankprogrammierung 17
T PreparedStatement anzeigen Datenbankprogrammierung 10
A PreparedStatement im Servlet - Referenz speichern Datenbankprogrammierung 3
P PreparedStatement - Angabe des PK Datenbankprogrammierung 4
J Fehler beim PreparedStatement Datenbankprogrammierung 2
B PreparedStatement - anzahl ParameterValues Datenbankprogrammierung 6
J PreparedStatement Datenbankprogrammierung 5
C PreparedStatement Datenbankprogrammierung 2
R DB2 PreparedStatement Batches ungültige Reihenfolge Datenbankprogrammierung 4
D SQL Server Android App: 'int java.lang.String.length()' on a null object reference Datenbankprogrammierung 15
T JPA: Nach String statt Primärschlüssel suchen Datenbankprogrammierung 9
M Oracle String aus Column splitten und x Rows daraus erstellen Datenbankprogrammierung 1
C String in Datenbank einfügen Datenbankprogrammierung 11
E Conversion failed when converting date and/or time from character string. Datenbankprogrammierung 3
D String übergeben Datenbankprogrammierung 7
X MySQL Json String in MySQL einfügen. Datenbankprogrammierung 20
M SQLite Suche nach String Datenbankprogrammierung 4
C Objekte aus DB in Strings umwandeln also von List<Objekt> in String Datenbankprogrammierung 6
A ByteArray zu String dann wieder zu ByteArray Datenbankprogrammierung 2
D HSQLDB SQL ORDER BY nur mit fixen String machbar? Datenbankprogrammierung 16
F Dynamischen String in SQL Statement einbinden Datenbankprogrammierung 9
N String Array in While Schleife befüllen Datenbankprogrammierung 2
H Derby: SYSCS_UTIL.SYSCS_EXPORT_QUERY mit String Abfrage in wehre-Klausel nicht möglich Datenbankprogrammierung 3
R Zeichenkette in String zählen Datenbankprogrammierung 3
P GWT Applikation-The method forName(String) is undefined for the type Class Datenbankprogrammierung 10
B Mysql speichert keine 0 alls String Datenbankprogrammierung 11
B MySQL Datenbank Connection als String zurückgeben Datenbankprogrammierung 7
F Oracle ResultSet zu einer HashMap<Integer, String[]> Datenbankprogrammierung 6
I DB-Zelleninhalt mit String vergleichen klappt nicht Datenbankprogrammierung 3
I SQL_Abfrage-Ergebnis (ResultSet) in String[] speichern Datenbankprogrammierung 29
M SQL String Datenbankprogrammierung 2
G Sonderzeichen im String codieren Datenbankprogrammierung 4
K Date in SQL-String konvertieren Datenbankprogrammierung 3
B String aus txtDatei auslesen und in Datenbank schreiben. Datenbankprogrammierung 8
T Mittels SQL-String ein Berechnung vornehmen Datenbankprogrammierung 2
C SQL String zwei Tabellen vergleichen und gleiche Zeile löschen Datenbankprogrammierung 25
C Split String für SQl query Datenbankprogrammierung 10
J String[] in eine SQL-Anweisung implementieren Datenbankprogrammierung 13
F ResultSet to String[] Datenbankprogrammierung 3
S Connection String MS Access mit Systemdatenbank / Arbeitsgruppeninformationsdatei Datenbankprogrammierung 4
G Hilfe um String an Datenbank zu schicken Datenbankprogrammierung 3
M SELECT longtext -> als String behandeln Datenbankprogrammierung 6
G Daten aus ResultSet in String-Liste Datenbankprogrammierung 13
padde479 Connection String Oracle Datenbankprogrammierung 5
T SQL Date String in java.util.Date umwandeln Datenbankprogrammierung 3
G ResultSet: String mit Anführungszeichen einlesen Datenbankprogrammierung 8
A JPA + @OneToMany + String ArrayList Datenbankprogrammierung 4
S Char to String aus DB Datenbankprogrammierung 2
Q string Vergleich Datenbankprogrammierung 2
M Konvertierung eines Ojects to String Datenbankprogrammierung 3
D INSERT String enthält ' wie kann man das Escapen? Datenbankprogrammierung 4
G MsSQL | Statement.execute(String s) Datenbankprogrammierung 3
G CLOB to String - Encoding Problem Datenbankprogrammierung 6
D String[][] Array in Access Datenbank speichern Datenbankprogrammierung 5
K Hibernate: Liste von String-Werten Datenbankprogrammierung 2
S String probleme Datenbankprogrammierung 3
R Nach String in MySQL datenbank suchen Datenbankprogrammierung 7
M Datum's String in MSSQL oder MySQL wie konvertieren ? Datenbankprogrammierung 3
T String in DB(Oracle) schreiben mit Leerzeichen Datenbankprogrammierung 4
K ResultSet: Erste Zeile ausgeben, Datensatz in String speiche Datenbankprogrammierung 13
E Fehler bei String-Insert in MySQL-DB Datenbankprogrammierung 8
L Datum (String) in MySQL-Tabelle (date) speichern Datenbankprogrammierung 4
C SQLException wenn String auf VARCHAR geschrieben wird Datenbankprogrammierung 10
T Methode getColumnIndex(String columnName) ? Datenbankprogrammierung 6
K string literal too long was tun ? Datenbankprogrammierung 9
L JPA EclipseLink PostgreSQL auslesen mit Query Datenbankprogrammierung 2
Zrebna Lediglich interne DB-Verbindungen (Connections) auslesen - mittels Java Datenbankprogrammierung 4
L Oracle Oracle Datumsspalte auslesen Datenbankprogrammierung 5
A Umsätze der Bank auslesen Datenbankprogrammierung 7
G MySQL JDBC Metadaten auslesen aus .accdb -> Primärschlüssel manchmal erkannt manchmal nicht Datenbankprogrammierung 3

Ähnliche Java Themen


Oben