2009-09-09 27 views
14

SQLException.getSQLState ruft das Objekt SQLState für das Objekt SQLException ab. Was sind alle möglichen Werte, die mit dieser Methode zurückgegeben werden können? Kann ich den Wert verwenden, um bestimmte Fehler zu identifizieren, die in der Datenbank aufgetreten sind (d. H. Kann dieser Wert mir mitteilen, ob es sich um eine PK-Verletzung oder eine eindeutige Einschränkung oder einen Spaltenwert für Groß usw. handelte)?Was sind alle möglichen Werte für SQLException.getSQLState?

Auch die DatabaseMetaData.getSQLStateType() Methode soll angeben, ob die SQLSTATE zurückgegeben von SQLException.getSQLState ist X/Open (jetzt als offene Gruppe) SQL CLI oder SQL99. Der einzig mögliche Wert dafür sollte DatabaseMetaData.sqlStateXOpen == 1 und DatabaseMetaData.sqlStateSQL99 == 2 sein, aber ich bekomme den Wert 0. Fehle ich etwas?

Gibt es eine Möglichkeit, den spezifischen Fehlertyp, der im DB aufgetreten ist, mit Kombinationen der oben genannten Methoden zu ermitteln? Kann ich auf die Werte von zählen? Unterscheiden sich diese Werte vom DB-Provider zum DB-Provider?

+0

[Siehe auch diese Antwort] (http://stackoverflow.com/a/1989469/521799) –

Antwort

2

Offizielle Dokumente, die SQLStates enthalten, können offensichtlich zu einem relativ hohen Preis von ANSI und XOpen erworben werden. Die Dokumentation für die meisten Datenbanken enthält jedoch Listen mit SQLStates. Die wahrscheinlich vollständigsten (und zugänglichen) Online-Listings finden Sie in den DB2-Handbüchern. Überprüfen Sie zum Beispiel die DB2 Universal Messages manual. Oracle (TechNet-Passwort erforderlich) und Sybase haben unter anderem auch Online-Angebote.

Zur zweiten Frage, dies ist die Absicht von SQLState, jedoch haben die verschiedenen Datenbanken unterschiedliche Konformitätsgrade. Zum Beispiel werden einige systemeigene Fehlermeldungen auf denselben SQLState abgebildet. Für allgemeine Verwendung, sollte man wohl auf dem Haupt Code konzentrieren (die ersten beiden Zeichen von SQLState,) dann festzustellen, ob weiteren spezifischen Informationen in dem kleinen Code verfügbar sind (über 000.)

http://www.jguru.com/faq/view.jsp?EID=46397

1

Dies ist zu einem gewissen Grad JDBC-Treiber abhängig. Es scheinen Standardwerte und einige proprietäre Werte zu sein.

Als Richtschnur für die möglichen Maßnahmen enthält die JDBC-Schicht von Spring SQL-Fehlercode und Zustandsübersetzung. Es bietet eine SQLState translator, die ziemlich vage Ausnahme Übersetzung gibt, sowie eine SQLErrorCode translator, die viel feiner ist, mit bekannten proprietären Fehlercodes.

Wenn Sie Spring nicht verwenden können, laden Sie den Quellcode herunter, und extrahieren Sie die Datei sql-error-codes.xml, die die Zuordnung von Codes zu Ausnahmetypen enthält.

2

Die X/Open (jetzt Open Group) Standards sind jetzt kostenlos verfügbar (aber Registrierung erforderlich). Siehe Data Management: SQL Call Level Interface (CLI) für den SQL CLI (alias ODBC) -Standard, SQLSTATE-Codes sind in Anhang A definiert. Und Data Management: Structured Query Language (SQL), Version 2 für den SQL-Standard, SQLSTATE-Codes sind in Anhang B definiert. Wie für die ISO-Standards, während Sie für die offiziellen Versionen bezahlen müssen die endgültigen Entwürfe (die fast identisch sind) sind frei verfügbar; für SQL: 2011, siehe Seite 2017 (nach PDF-Nummerierung; 1194 nach Dokumentennummerierung) von Final Committee Draft ISO/IEC FCD 9075-2

Verwandte Themen