2013-06-29 4 views

Antwort

12

Die Methode getCause() gibt Ihnen die Ursache - falls vorhanden - des spezifischen SQLException. Andererseits ist es bei der Verarbeitung durchaus möglich, dass mehrere Ausnahmen auftreten, man denke an Batch-Verarbeitung, serverseitige Fehler für mehrere Abfrageparameter (zB zu lange, Konvertierungsfehler etc.).

Diese mehreren Ausnahmen sind auf der gleichen Ebene (sie sind nicht gegenseitig Ursache), so dass sie zu einer Kette von SQLException s hinzugefügt werden. Der Kopf dieser Kette ist die Ausnahme, die geworfen wird. Um zu den anderen SQLException s in der Kette, verwenden Sie getNextException(). Eg

try { 
    // Something that produces multiple SQLExceptions 
} catch (SQLException e) { 
    SQLException current = e; 
    do { 
     // do something with current 
    } while ((current = current.getNextException()) != null) 
} 

Auf der anderen Seite ist ein SQLException hat auch ein Verfahren public Iterator<Throwable> iterator() (eingeführt in Java 6/JDBC4), diese iteriert über jeden SQLException und ihre Ursachen, bevor in der Kette zu den nächsten SQLException fortfahren.

5

Eine SQL-Operation kann aus mehreren unabhängigen Gründen fehlschlagen - Sie könnten beispielsweise versuchen, mehrere Zeilen zu aktualisieren, und drei Zeilen sind nicht vorhanden. Diese drei Fehler sind unabhängig - keiner von ihnen verursacht den anderen. Das ist, wo getNextException() angemessen ist - und Sie können setNextException() verwenden, wenn die Ausnahme zu konstruieren.

Auf der anderen Seite, wenn die ganze Operation weil gibt es eine IOException ausgefallen ist, wenn auf die Datenbank zu sprechen, das ist eine Ursache - der einzige Grund, die SQLException war aufgetreten, weil die IOException aufgetreten. Das ist, wo getCause() angemessen ist - passieren in der Sache an den Konstruktor, wenn Sie die SQLException erstellen.

5

Die Ausführung einer SQL-Anweisung kann zu vielen SQLExceptions führen, insbesondere wenn es sich um eine Batch-Anweisung handelt. Angenommen, Sie 10 Zeilen in einem Batch einfügen und zwei fehlschlagen: Sie werden auf eine Ausnahme, die Sie die Charge sagt ausgefallen und dass Sie die getNextException Methode verwenden sollten, um die Details zuzugreifen. Dies kann jedoch vom Datenbanktreiber abhängen.

Die Ursache einer Ausnahme verwendet, wenn eine Ausnahme in einer anderen Umhüllung, beispielsweise eine anwendungsspezifische Ausnahme ausgelöst, die von einem oder IO SQLException verursacht wurden.