jdbc exception handling how handle sql exceptions
beste Seite, um Anime zu sehen
In diesem Tutorial zur Behandlung von JDBC-Ausnahmen werden anhand von Programmierbeispielen die Möglichkeiten zum Umgang mit SQL-Ausnahmen erläutert:
In dem JDBC-Transaktionsmanagement Tutorial der JDBC-Tutorialserie Wir lernten JDBC-Transaktionstypen, Datentypen, Transaktionsverwaltungsmethoden und deren Verwendung in Java-Programmen.
In diesem Tutorial erfahren Sie mehr über Ausnahmen in JDBC und wie Sie damit umgehen. Wenn in JDBC die Ausnahme aufgrund der Datenbankkonnektivität oder in Bezug auf die Datenbank aufgetreten ist, fällt sie unter die SQLException. Hier finden Sie weitere Informationen zu SQLExceptions.
Machen wir uns bereit, um mehr über Ausnahmen in JDBC zu erfahren.
Was du lernen wirst:
JDBC-Ausnahmebehandlung
Ausnahmen treten auf, wenn bei der Ausführung des Programms ein Fehler oder eine Warnung auftritt. Wenn eine Ausnahme auftritt, wird der normale Programmfluss gestört und das Programm wird abnormal beendet. Das Gute an der Ausnahme ist, dass wir sie mit einem Try-Catch-Block oder einem Schlüsselwort auslösen können. Alle Ausnahmen und Fehler sind die Unterklassen der Klasse Throwable. Die Throwable-Klasse ist die Basisklasse aller Ausnahmen und Fehler.
Schlüsselwörter für die Behandlung von Java-Ausnahmen
Es gibt fünf Schlüsselwörter in der Java-Ausnahmebehandlung. Sie sind wie folgt:
- Versuchen: Programmanweisungen, die die Ausnahme auslösen können, sollten in einem try-Block gespeichert werden.
- Fang: Wenn im try-Block eine Ausnahme auftritt, wird diese ausgelöst. Wir können diese Ausnahme mit dem Catch-Block abfangen und im Code behandeln.
- Werfen: Vom System generierte Ausnahmen werden von JVM automatisch ausgelöst. Um die Ausnahmen manuell auszulösen, sollten wir ein Schlüsselwort throw verwenden.
- Würfe: Jede Ausnahme, die aus einer Methode ausgelöst wurde, sollte durch eine throw-Klausel angegeben werden.
- Endlich: Alle Programmanweisungen, die nach dem try-Block ausgeführt werden müssen, sollten im finally-Block beibehalten werden.
>> Klicken Sie auf Hier Weitere Informationen zu Ausnahmen in Java.
SQLException
In JDBC erhalten wir möglicherweise Ausnahmen, wenn wir die Abfrage ausführen oder erstellen. Ausnahmen, die aufgrund der Datenbank oder des Treibers auftreten, fallen unter die SQL-Ausnahme. Mit der Ausnahmebehandlung können wir die SQL-Ausnahme wie die normale Ausnahme behandeln.
SQLException ist im Paket java.sql verfügbar. Es erweitert die Exception-Klasse, was bedeutet, dass wir die in der Exception-Klasse verfügbaren Methoden auch in der SQLException-Klasse verwenden können.
Beispiel für eine SQL-Ausnahme
Ein Syntaxfehler in der SQL-Anweisung kann zu einer SQL-Ausnahme führen. Wenn eine solche Ausnahme auftritt, wird ein Objekt der SQLException-Klasse an den catch-Block übergeben. Mithilfe der Informationen im SQLException-Objekt können wir diese Ausnahme abfangen und das Programm fortsetzen.
Das SQLException-Objekt verfügt über die folgenden Methoden:
Methodenname | Beschreibung |
---|---|
getErrorCode () | Es gibt die Fehlernummer zurück |
getMessage () | Es gibt die Fehlermeldung zurück |
getSQLState () | Es gibt den SQLState des SQLException-Objekts zurück. Es kann auch null zurückgeben. Bei einem Datenbankfehler wird der XOPEN SQL-Status zurückgegeben |
getNextException () | Es gibt die nächste Ausnahme in der Ausnahmekette zurück. |
printStackTrace () | Es druckt die aktuelle Ausnahme und ihre Rückverfolgung in einen Standardfehlerstrom |
setNextException (SQLEXception ex) | Es wird verwendet, um der Kette eine weitere SQL-Ausnahme hinzuzufügen |
Umgang mit Ausnahmen
Eine JDBC-bezogene Ausnahme löst meistens eine SQLException aus, und es handelt sich um eine aktivierte Ausnahme, sodass wir sie entweder abfangen oder auslösen müssen. Alle Geschäftslogik- und Festschreibungsdaten sollten in einem Try-Block ausgeführt werden. Wenn im Block eine Ausnahme aufgetreten ist, sollten wir sie im Catch-Block abfangen und behandeln. Basierend auf dem Ausnahmetyp sollten wir die Rollbacks oder Commits im Catch-Block durchführen.
Kategorien von SQLException
Manchmal löst der JDBC-Treiber die Unterklasse von SQLException aus, die einen allgemeinen SQL-Status oder einen allgemeinen Fehlerstatus darstellt, der speziell keinem bestimmten SQL-Statusklassenwert zugeordnet ist. Dadurch können Sie die Ausnahme spezifischer behandeln, und wir können sie in unserem Code behandeln. Diese Arten von Ausnahmen fallen unter die Unterklassen einer der folgenden Ausnahmen:
- SQLNonTransientException: Diese Art von Ausnahme wird ausgelöst, wenn eine Instanz, in der ein erneuter Versuch derselben Operation fehlschlagen würde, wenn die Ursache der SQLException nicht behoben wurde.
- SQLTransientException: Diese Art von Ausnahme wird ausgelöst, wenn eine zuvor fehlgeschlagene Operation erfolgreich sein kann, wenn wir die Operation ohne Änderung / Intervention erneut versuchen.
- SQLRecoverableException: Diese Art von Ausnahme wird ausgelöst, wenn eine zuvor fehlgeschlagene Operation erfolgreich sein kann, wenn wir die Operation mit einer Änderung / Intervention der Anwendung erneut versuchen. Dabei sollte die aktuelle Verbindung geschlossen und die neue Verbindung geöffnet werden.
Andere Unterklassen von SQLException:
Das Folgende sind die Unterklassen von SQLException:
- BatchUpdateException: Diese Art von Ausnahme wird ausgelöst, wenn beim Ausführen der Stapelaktualisierung ein Fehler aufgetreten ist. Neben den SQLException-Informationen gibt BatchUpdateException den Status der Anweisungen an, die ausgeführt / aktualisiert wurden, bevor der Fehler aufgetreten ist.
- SQLClientInfoException: Diese Art von Ausnahme wird ausgelöst, wenn eine oder mehrere Informationseigenschaften für eine Verbindung nicht festgelegt werden konnten. Neben den SQLException-Informationen enthält SQLClientInfoException eine Liste der Client-Informationseigenschaften, die nicht festgelegt wurden.
In diesem Tutorial sehen wir die normale SQLException und dann die BatchUpdateException. Sie können die verbleibenden Unterklassen von SQLException auf Ihrem System ausüben.
Im folgenden Beispiel wird erläutert, wie die Ausnahme behandelt wird.
Alle Programme sind in diesem Tutorial in Java geschrieben. Wir haben Java 8 Version und Oracle DB verwendet.
>> Klicken Sie auf Hier um die Oracle-Software herunterzuladen
>> Klicken Sie auf Hier um die Java Version 8 herunterzuladen
Es verfügt über einen schrittweisen Java-Installationsprozess.
Beispielbeispiel für Ausnahmen
package com.STH.JDBC; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Exception_Example { public static void main(String() args) throws ClassNotFoundException { // TODO Auto-generated method stub String update_query = 'update employee_details set email='martinL@gmail.com' where empNum1 = 10011'; //Update query to set the email id for the employee whose empNUM is 10011 Class.forName('oracle.jdbc.driver.OracleDriver'); try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); ResultSet rs1 =null; statemnt1 = conn.createStatement(); System.out.println('Executing Update query using executeUpdate method'); int return_rows = statemnt1.executeUpdate(update_query); System.out.println('No. of Affected Rows = '+ return_rows); } catch(SQLException sqe) { System.out.println('Error Code = ' + sqe.getErrorCode()); System.out.println('SQL state = ' + sqe.getSQLState()); System.out.println('Message = ' + sqe.getMessage()); System.out.println('printTrace /n'); sqe.printStackTrace(); } } }
Ausgabe:
Erläuterung:
# 1) Es wurde eine Auswahlabfrage erstellt, deren Spaltenname nicht in der Tabelle EMPLOYEE_DETAILS enthalten ist.
Abfrage erstellen:
String update_query = 'update employee_details set email='martinL@gmail.com' where empNum1 = 10011';
#zwei) Verbindung, Anweisung erstellt und die Auswahlabfrage im try-Block ausgeführt.
#3) Im Catch-Block haben wir die Ausnahme behandelt.
# 4) Wir zeigen den Fehler der Ausnahme mit der Methode getError (), SQLState der Ausnahme mit der Methode getSQLState (), die Meldung der Ausnahme mit der Methode getMessage () an und drucken den Stack-Trace der Ausnahme mit der Methode printStackTrace.
Beispiel für eine BatchUpdateException
Wir haben eine neue Tabelle erstellt, um das Beispiel der BatchUpdateException zu veranschaulichen. Der Name der Tabelle lautet MITARBEITER. Es hat 3 Spalten.
Sie sind:
- ID, die ein Primärschlüssel ist
- NACHNAME
- VORNAME
Syntax zum Erstellen einer Tabelle in ORACLE DB:
CREATE TABLE EMPLOYEE ( ID int NOT NULL PRIMARY KEY, LastName varchar(255), FirstName varchar(255) );
Java-Programm:
package com.STH.JDBC; import java.sql.BatchUpdateException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Statement_ExecuteBatch_Example { public static void main(String() args) throws ClassNotFoundException, SQLException { //Inserting the following 3 rows in EMPLOYEE_DETAILS Table String insert_query1 = 'insert into employee values(101,'Patterson','Tony')'; String insert_query2 = 'insert into employee values(102,'Potter','Harry')'; String insert_query3 = 'insert into employee values(102,'Wong','Jane')'; Class.forName('oracle.jdbc.driver.OracleDriver'); //Opening Oracle DB Connection try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); //Adding the 3 insert queries into the Statement object using addBatch method statemnt1.addBatch(insert_query1); statemnt1.addBatch(insert_query2); statemnt1.addBatch(insert_query3); int No_of_Afffected_Rows()= statemnt1.executeBatch(); //After inserting the data System.out.println('No of rows affected = ' +No_of_Afffected_Rows.length); } //Catching the BatchUpdateException catch(BatchUpdateException be) { //getting the updated rows status before the exception has occurred int() updateCount = be.getUpdateCounts(); int count = 1; for (int i : updateCount) { //Using for loop, printing the statement which has been successfully executed if (i == Statement.EXECUTE_FAILED) { System.out.println('Error on Statement ' + count +': Execution failed'); } else { System.out.println('Statement ' + count +': is executed'); } count++; //Incrementing the count to display the next updated row no. } //System.out.println('Error on statemet '+be.getUpdateCounts()); be.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } }
AUSGABE:
Erläuterung:
Was wir im obigen Programm getan haben, ist, dass wir 3 INSERT-Abfragen erstellt und in einem Stapel hinzugefügt und ausgeführt haben. Die 3rdDie Abfrage hat den gleichen ID-Wert von 1stAbfrage Da die ID-Spalte ein Primärschlüssel der Tabelle EMPLOYEE ist, hat das Programm eine BatchUpdateException ausgelöst.
- Erstellt die 3 Einfüge-Abfragen, um sie in die EMPLOYEE-Tabelle einzufügen. Die erste und dritte Abfrage haben denselben ID-Wert. Die ID-Spalte ist ein Primärschlüssel für die Tabelle EMPLOYEE.
- Erstellt ein Anweisungsobjekt und fügt diese 3 Abfragen mit der Methode addBatch () hinzu. Dann wird die Methode executeBatch () aufgerufen, um sie auszuführen.
- Da die erste und dritte Abfrage den gleichen ID-Wert haben. Wenn die executeBatch () versucht hat, die dritte Abfrage auszuführen, wird eine BatchUpdateException ausgelöst.
- Im Fangblock BatchUpdateException haben wir die Methode getUpdateCounts () aufgerufen, um den Status der aktualisierten Zeile abzurufen.
- Mit der for-Schleife prüfen wir nacheinander, ob der Status der jeweiligen Anweisung fehlgeschlagen ist oder nicht. Wenn die bestimmte Anweisung nicht fehlschlägt, wird die Zeilennummer der Anweisung gedruckt.
- Danach wird der printStackTrace der BatchUpdateException gedruckt.
- Da im obigen Beispiel die Ausnahme aufgrund der dritten Anweisung aufgetreten ist, wurden die Anweisungen 1 und 2 gedruckt. Anschließend wurde die vollständige Ablaufverfolgung der Ausnahme in der Ausgabekonsole gedruckt.
Punkte, die man sich merken sollte:
- Die Ausnahme, die aufgrund der Datenbank aufgetreten ist, fällt unter SQLException.
- Ausnahmen in Java können mit dem try: catch-Block behandelt werden.
- SQLException ist die aktivierte Ausnahme, sodass wir sie mit dem try: catch-Block behandeln können.
- Wir haben einige Unterklassen von SQLException. Dies sind SQLNonTransientException, SQLTransientException, SQLRecoverableException, BatchUpdateException und SQLClientInfoException.
Häufig gestellte Fragen
F # 1) Was ist eine SQL-Ausnahme?
Antworten: Eine Ausnahme ist aufgetreten, weil die Datenbank als SQL-Ausnahme bezeichnet wird. Eine Ausnahme, die Informationen zu datenbankbezogenen Informationen enthält, wird auch als SQL-Ausnahme bezeichnet. Wir haben eine SQLException-Klasse in Java, die verwendet wird, um Informationen über die Ausnahme bereitzustellen. Es hat die folgenden Methoden:
- getErrorCode ()
- getMessage ()
- getSQLState ()
- printStackTrace ()
- getNextException ()
F # 2) Wie gehe ich mit der Ausnahme in SQL um?
Antworten: Schreiben Sie die Geschäftslogik in den try-Block. Wenn darin ein Fehler oder eine Ausnahme aufgetreten ist, fangen Sie ihn im Catch-Block ab und schreiben Sie die entsprechende Nachricht, um die Ausnahme leicht zu finden.
Der Try-Catch-Block wird verwendet, um die Ausnahme zu behandeln.
F # 3) Wann kann SQLException in Java auftreten?
Antworten: Eine SQLException tritt auf, wenn beim Datenbankzugriff ein Fehler oder andere mit der Datenbank verbundene Fehler vorliegen. Wenn SQLException auftritt, wird ein Objekt vom Typ SQLException an die catch-Klausel übergeben. Wir können damit im Catch-Block umgehen.
F # 4) Was ist die Ausnahmekette in Java und wozu dient sie?
Antworten: Eine Ausnahme, die eine andere Ausnahme verursacht, wird als Ausnahmekette oder verkettete Ausnahme bezeichnet. In den meisten Fällen müssen wir die Ausnahme so verketten, dass eine Ausnahme mit einer anderen Ausnahme verknüpft wird. Dadurch werden die Protokolle klar und einfach nachverfolgt. Dies ist für den Programmierer beim Debuggen hilfreich.
Zum Beispiel:
Stellen Sie sich eine Methode vor, die aufgrund der Division durch Null eine arithmetische Ausnahme auslöst. Die eigentliche Ursache der Ausnahme ist ein E / A-Fehler, der den Divisor auf Null setzt. Die Methode löst nur eine arithmetische Ausnahme für den Programmierer aus. Damit der Anrufer / Programmierer die eigentliche Ursache der Ausnahme nicht erfährt. In solchen Situationen können wir eine verkettete Ausnahme verwenden.
Fazit
Ausnahmen können mit einem Try-Catch-Block oder durch Auslösen behandelt werden. Aufgrund der Datenbank aufgetretene Ausnahmen werden als SQLException bezeichnet. Wir haben eine separate Klasse für SQLException, die eine Unterklasse von Exception ist. Wir haben die Methoden, um die SQL-Ausnahme genauer kennenzulernen.
Die Methoden sind getMessage (), getErrorCode (), getSQLState (), getNextException und printStackTace. getNextException wird im Fall Exception Chained verwendet.
Literatur-Empfehlungen
- Java-Ausnahmen und Ausnahmebehandlung mit Beispielen
- Top 10 Selen-Ausnahmen und wie man damit umgeht (Exakter Code)
- Vollständige Anleitung zur Behandlung von PL SQL-Ausnahmen mit Beispielen
- Tutorial zur Behandlung von C # -Ausnahmen mit Codebeispielen
- Ausnahmebehandlung in C ++
- So behandeln Sie Ausnahmen in SoapUI Groovy-Skripten - SoapUI Tutorial # 11
- PL SQL Tutorial für Anfänger mit Beispielen | Was ist PL / SQL?
- PL SQL-Paket: Oracle PL / SQL-Paket-Tutorial mit Beispielen