ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
1690
1690
EMPFEHLEN
-
Hallo zusammen,
ich erstelle ein Prepared Statement mit x Variablen. Jetzt setze ich alle x Postionen mit den entsprechenden set-Funktionen und führe das PreparedStatement aus.
Wenn es nun aus irgend einem Grund zu einer SQL-Exception kommt würe ich gerne den kompletten (zusammengesetzten) SQL-Query + den Spaltennamen der den Fehler verursacht hat. Sei es durch falschen Datentyp ODER falschen Wert.
Wie könnte man das realisieren?
Die SQL-Exception gibt nicht viel her...
Code :1
A truncation error was encountered trying to shrink VARCHAR 'testeinstest' to length 10.
Habt ihr einen Ansatz?
lg
-
17.09.08 10:06 #2
- Registriert seit
- Aug 2005
- Ort
- Karlsruhe (Baden-Württemberg)
- Beiträge
- 905
Die SQL Exception sagt doch alles aus....
Du verkleinerst eine VARCHAR Spalte....aber für testeinstest reicht der neue Platz von 10 Zeichen nicht.
Und
hätte dir auch nach kürzester Zeit geholfen
;
Wäre super wenn ihr euren Code in dieser Form einfügt:
[java]System.out.println("Hello World");[/java]Code java:1
System.out.println("Hello World");
Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
Blog: http://javaeffective.wordpress.com/
-
-
17.09.08 12:31 #4
- Registriert seit
- Aug 2005
- Ort
- Karlsruhe (Baden-Württemberg)
- Beiträge
- 905
Wäre super wenn ihr euren Code in dieser Form einfügt:
[java]System.out.println("Hello World");[/java]Code java:1
System.out.println("Hello World");
Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
Blog: http://javaeffective.wordpress.com/
-
Naja wie genau man ein PrepareStatement benutzt muss ich ja nun nicht beschreiben denke ich. Das ist ja bekannt...
Die Exception tritt logischerweise genau in der Zeile auf wo ich den Query absetzen will:
Code :1
ResultSet result = prepared.executeQuery();
Das Problem ist, dass die prepared.setString(..)-Methode natürlich nicht weiß wie groß das Feld ist in das später der Wert eingetragen werden soll. String ist erstmal String. Egal wie lang. Auch der Datentyp für die entsprechende Position ist egal. Das funktioniert ja erstmal.
Das Problem ist, dass die Daten extern eingefügt werden (auch die Vorlage für das PreparedStatement). Also ich weiß nicht in welche Tabelle später die Daten geschrieben werden und wieviele Spalten etc.
Das Problem ist, dass ich mir nun soetwas wünsche wie:
(wo also alle Fragezeichen (?) durch die Werte gesetzt sind die ich übergeben habe)Code :1
String kompletterQuery = prepared.getQuery();
Dann könnte ich ja zusammen mit dem Wert der falsch geschrieben wurde (testeinstest) anhand der Position im Query bestimmen in welcher Spalte das Problem aufgetreten ist.
Aber das halte ich für sehr umständlich.
Daher existiert dieser Thread: Für die Suche nach anderen Lösungen!
lg
-
Um das hier ab zu schließen (ich hasse es, wenn ich ein Problem habe und einen Thread mit genau dem gleichen Problem finde der nicht abgeschlossen wurde)
Ich habe einen richtigen Umweg gewählt soweit ich mich noch erinnern kann. Erst habe ich den Insert-String komplett zerlegt (so dass ich weiß wie welche Spalten heißen) und dann habe ich anhand des Wertes den ich einfügen wollte den Index festgestellt.
Also bei
Code :1
Inser into bla (spalte1, spalte2, spalte3) values ('test', 'test222', 'test333');
hab ich Anhand der Reihenfolge feststellen können, welche Spalte beispielsweise zu 'test222' gehört - wenn der Insert fehl geschlagen ist.
lg und erledigt.
Schönes Wochenende
-
Um die ganzen "?" aufzulösen hilft ein Trick von IBM

http://www.ibm.com/developerworks/ja...-loggable.html
-
24.02.09 11:14 #8
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
eine weitere Möglichkeit die von einem PreparedStatement gebundenen Parameterwerte ausgeben zu lassen ist das logging des entsprechenden JDBC Treibers zu verwenden. Viele JDBC Treiber bieten entsprechende JVM Parameter an die man beispielsweise beim Starten der Anwendung in etwa mit -Dsome.jdbc.driver.property.enable.logging=true angeben kann.
Diese Möglichkeit ist etwas weniger invasiv als an allen möglichen Stellen "eigene" Tracing-Aware JDBC PreparedStatements zu verwenden.
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Ähnliche Themen
-
Frage zu PreparedStatement mysql , jdbc
Von Gast im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 26.07.09, 19:19 -
PreparedStatement: welche Möglichkeit bietet Platzhalter ?
Von sportingt im Forum JavaAntworten: 5Letzter Beitrag: 10.11.06, 14:30 -
Performance verbessern bei PreparedStatement (Oracle 9i)
Von sportingt im Forum JavaAntworten: 1Letzter Beitrag: 04.11.05, 12:41 -
KnightRider - Fehleranalyse
Von Alexander Schuc im Forum Fun-ForumAntworten: 10Letzter Beitrag: 04.09.03, 18:12 -
Fehleranalyse Festplatte ?
Von tefla im Forum HardwareAntworten: 8Letzter Beitrag: 27.09.02, 17:23





Zitieren

Login





