tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
1690
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Klein0r
    Klein0r Klein0r ist offline Mitglied Platin
    Registriert seit
    Sep 2007
    Ort
    Paderborn
    Beiträge
    718
    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
     

  2. #2
    Anime-Otaku Anime-Otaku ist offline Mitglied Brillant
    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:
    Code java:
    1
    
    System.out.println("Hello World");
    [java]System.out.println("Hello World");[/java]
    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/

  3. #3
    Avatar von Klein0r
    Klein0r Klein0r ist offline Mitglied Platin
    Registriert seit
    Sep 2007
    Ort
    Paderborn
    Beiträge
    718
    Also lesen und englisch kann ich auch. Danke...
    Lies folgendes nochmal:

    Zitat Zitat von Klein0r Beitrag anzeigen
    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 ausgeben. Sei es durch falschen Datentyp ODER falschen Wert.
    Und für welche Spalte war laut der SQL-Exception der String zu lang?
    Weiß man nicht. Und genau das will ich lösen...

    Danke und lg
     

  4. #4
    Anime-Otaku Anime-Otaku ist offline Mitglied Brillant
    Registriert seit
    Aug 2005
    Ort
    Karlsruhe (Baden-Württemberg)
    Beiträge
    905
    Zitat Zitat von Klein0r Beitrag anzeigen
    Und für welche Spalte war laut der SQL-Exception der String zu lang?
    Weiß man nicht. Und genau das will ich lösen...

    Danke und lg
    Ok...so gibt der Satz mehr Sinn

    Sorry, ich sollte aufhören früh morgends auf Posts zu antworten

    Kannst du etwas Source Code posten, wo du die Exception abfängst?
     
    Wäre super wenn ihr euren Code in dieser Form einfügt:
    Code java:
    1
    
    System.out.println("Hello World");
    [java]System.out.println("Hello World");[/java]
    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/

  5. #5
    Avatar von Klein0r
    Klein0r Klein0r ist offline Mitglied Platin
    Registriert seit
    Sep 2007
    Ort
    Paderborn
    Beiträge
    718
    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:
    Code :
    1
    
    String kompletterQuery = prepared.getQuery();
    (wo also alle Fragezeichen (?) durch die Werte gesetzt sind die ich übergeben habe)

    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
     

  6. #6
    Avatar von Klein0r
    Klein0r Klein0r ist offline Mitglied Platin
    Registriert seit
    Sep 2007
    Ort
    Paderborn
    Beiträge
    718
    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
     

  7. #7
    notte notte ist offline Rookie
    Registriert seit
    Apr 2006
    Beiträge
    5
    Um die ganzen "?" aufzulösen hilft ein Trick von IBM

    http://www.ibm.com/developerworks/ja...-loggable.html
     

  8. #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ß Tom
     
    Java 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

  9. #9
    Avatar von Klein0r
    Klein0r Klein0r ist offline Mitglied Platin
    Registriert seit
    Sep 2007
    Ort
    Paderborn
    Beiträge
    718
    Zitat Zitat von notte Beitrag anzeigen
    Um die ganzen "?" aufzulösen hilft ein Trick von IBM

    http://www.ibm.com/developerworks/ja...-loggable.html
    Our apologies...
    The page you requested cannot be displayed
     

Ähnliche Themen

  1. Frage zu PreparedStatement mysql , jdbc
    Von Gast im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 26.07.09, 19:19
  2. Antworten: 5
    Letzter Beitrag: 10.11.06, 14:30
  3. Antworten: 1
    Letzter Beitrag: 04.11.05, 12:41
  4. KnightRider - Fehleranalyse
    Von Alexander Schuc im Forum Fun-Forum
    Antworten: 10
    Letzter Beitrag: 04.09.03, 18:12
  5. Fehleranalyse Festplatte ?
    Von tefla im Forum Hardware
    Antworten: 8
    Letzter Beitrag: 27.09.02, 17:23