jdbc exception handling how handle sql exceptions
cel mai bun software de monitorizare a temperaturii Windows 10
Acest tutorial JDBC Exception Handling explică modalitățile de gestionare a excepțiilor SQL cu ajutorul exemplelor de programare:
În Managementul tranzacțiilor JDBC tutorial de Seria de tutoriale JDBC , am învățat tipurile de tranzacții JDBC, tipurile de date, metodele de gestionare a tranzacțiilor și cum să le folosim în programele Java.
În acest tutorial, vom afla despre excepțiile din JDBC și cum să le gestionăm. În JDBC, dacă excepția a avut loc din cauza conectivității bazei de date sau a oricărui lucru legat de DB, va intra sub SQLException. Aici, vom vedea mai multe informații despre SQLExceptions.
Să ne pregătim să aflăm despre excepțiile din JDBC.
Ce veți învăța:
JDBC Exception Handling
Excepții apar atunci când există o eroare sau un avertisment în executarea programului. Când apare o excepție, fluxul normal al programului va fi perturbat și programul va fi terminat anormal. Partea bună a excepției este că o putem rezolva folosind un bloc de încercare sau un cuvânt cheie. Toate excepțiile și erorile sunt subclasele clasei Throwable. Clasa aruncabilă este clasa de bază a tuturor excepțiilor și erorilor.
Cuvinte cheie pentru gestionarea excepțiilor Java
Există cinci cuvinte cheie în Java Exception Handling. Acestea sunt după cum urmează:
- Încerca: Instrucțiunile de program care pot genera excepția ar trebui păstrate într-un bloc de încercare.
- Captură: Dacă apare o excepție în blocul try, aceasta va fi aruncată. Putem prinde acea excepție folosind blocul Catch și o putem gestiona în cod.
- Arunca: Excepțiile generate de sistem sunt aruncate automat de JVM. Pentru a arunca manual excepțiile, ar trebui să folosim o aruncare de cuvinte cheie.
- Aruncă: Orice excepție care a fost eliminată dintr-o metodă ar trebui specificată printr-o clauză throws.
- In cele din urma: Orice instrucțiuni de program care trebuie executate după blocul try ar trebui păstrate în blocul final.
>> Faceți clic pe Aici pentru mai multe informații despre excepțiile din Java.
SQLException
În JDBC, putem obține excepții atunci când executăm sau creăm interogarea. Excepțiile care apar din cauza bazei de date sau a driverului intră sub Excepția SQL. Folosind gestionarea excepțiilor, putem gestiona excepția SQL așa cum gestionăm excepția normală.
SQLException este disponibil în pachetul java.sql. Extinde clasa Exception ceea ce înseamnă că putem folosi metodele disponibile în clasa Exception și în clasa SQLException.
Exemplu pentru excepția SQL
Eroarea de sintaxă din instrucțiunea SQL poate duce la excepția SQL. Când apare o astfel de excepție, un obiect din clasa SQLException va fi trecut la blocul de captură. Folosind informațiile din obiectul SQLException, putem prinde acea excepție și putem continua programul.
Obiectul SQLException are următoarele metode:
Nume metodă | Descriere |
---|---|
getErrorCode () | Returnează numărul de eroare |
getMessage () | Revine mesajul de eroare |
getSQLState () | Returnează SQLState al obiectului SQLException. Poate reveni și nul. Pentru eroarea bazei de date, va returna starea XOPEN SQL |
getNextException () | Returnează următoarea excepție din lanțul de excepții. |
printStackTrace () | Tipărește excepția curentă și urmărirea sa într-un flux de erori standard |
setNextException (SQLEXception ex) | Se folosește pentru a adăuga o altă excepție SQL în lanț |
Cum să gestionați excepțiile
Excepția legată de JDBC aruncă în principal SQLException și este o excepție verificată, deci trebuie să o prindem sau să o aruncăm. Toată logica de afaceri și datele de confirmare trebuie făcute într-un bloc Try, dacă s-a întâmplat o excepție în bloc, ar trebui să o prindem și să o gestionăm în blocul Catch. Pe baza tipului de excepție, ar trebui să efectuăm restabilirile sau să facem comanda în blocul Catch.
Categorii de excepții SQLE
Uneori, driverul JDBC poate arunca subclasa SQLException care reprezintă o stare SQL comună sau o stare de eroare comună care nu este specifică asociată cu o anumită valoare a clasei de stare SQL. Vă va face să gestionați excepția într-un mod mai specific și o putem gestiona în codul nostru. Aceste tipuri de excepții se încadrează în subclasele uneia dintre următoarele excepții:
- SQLNonTransientException: Acest tip de excepție va fi aruncat atunci când o instanță în care o reîncercare a aceleiași operații ar eșua, cu excepția cazului în care cauza SQLException a fost corectată.
- SQLTransientException: Acest tip de excepție va fi aruncat atunci când o operație eșuată anterior este capabilă să reușească atunci când am re-încercat operațiunea din nou fără nicio modificare / intervenție.
- SQLRecoverableException: Acest tip de excepție va fi aruncat atunci când o operație eșuată anterior poate avea succes atunci când am re-încercat operațiunea din nou cu orice modificare / intervenție a aplicației. În acest timp, conexiunea curentă ar trebui închisă și noua conexiune ar trebui deschisă.
Alte subclasele SQLException:
Următoarele sunt subclasele SQLException:
- BatchUpdateException: Acest tip de excepție va fi aruncat dacă s-a produs o eroare în timpul efectuării operației de actualizare a lotului. Pe lângă informațiile SQLException, BatchUpdateException oferă starea instrucțiunilor care au fost executate / actualizate înainte ca eroarea să aibă loc.
- SQLClientInfoException: Acest tip de excepție va fi aruncat dacă una sau mai multe proprietăți de informații nu au putut fi setate pe o conexiune. Pe lângă informațiile SQLException, SQLClientInfoException o listă cu proprietățile informațiilor despre clienți care nu au fost setate.
În acest tutorial, vom vedea SQLException normală, iar apoi vom vedea BatchUpdateException. Puteți exercita subclasele rămase de SQLException pe sistemul dvs.
În exemplul următor, vom detalia cum să gestionăm excepția.
Toate programele sunt scrise în Java, în acest tutorial. Am folosit versiunea Java 8 și Oracle DB.
>> Faceți clic pe Aici pentru a descărca software-ul Oracle
>> Faceți clic pe Aici pentru a descărca versiunea Java 8
Are procesul de instalare pas cu pas Java.
Excepții Exemplu de program
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(); } } }
Ieșire:
Explicaţie:
# 1) A fost creată o interogare selectată care are numele coloanei care nu se află în tabelul EMPLOYEE_DETAILS.
Creați interogare:
String update_query = 'update employee_details set email='martinL@gmail.com' where empNum1 = 10011';
#Două) A fost creată Conexiunea, instrucțiunea și s-a executat interogarea selectată în blocul try.
# 3) În blocul Catch, am gestionat excepția.
# 4) Afișăm Eroarea excepției folosind metoda getError (), SQLState al excepției folosind metoda getSQLState (), mesajul excepției folosind metoda getMessage () și imprimăm urmele stivei excepției folosind metoda printStackTrace.
Exemplu BatchUpdateException
Am creat un nou tabel pentru a ilustra exemplul BatchUpdateException. Numele tabelului este ANGAJAT. Are 3 coloane.
Sunt:
- ID care este o cheie primară
- NUMELE DE FAMILIE
- NUME
Sintaxa pentru a crea un tabel în ORACLE DB:
CREATE TABLE EMPLOYEE ( ID int NOT NULL PRIMARY KEY, LastName varchar(255), FirstName varchar(255) );
Program Java:
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(); } } }
IEȘIRE:
Explicaţie:
Ceea ce am făcut în programul de mai sus este că am creat 3 interogări INSERT și le-am adăugat într-un lot și l-am executat. Cele 3rdinterogarea are aceeași valoare de identificator 1Sfinterogare deoarece coloana ID este o cheie primară a tabelului EMPLOYEE, programul a lansat o excepție BatchUpdateException.
- Au fost create cele 3 interogări de inserare pentru ao insera în tabelul ANGAJAT. Prima și a treia interogare au aceeași valoare ID. Coloana id este o cheie principală a tabelului EMPLOYEE.
- S-a creat obiectul declarației și am adăugat aceste 3 interogări în el folosind metoda addBatch (). Apoi se numește metoda executeBatch () pentru a o executa.
- Deoarece prima și a treia interogare are aceeași valoare ID. Când executeBatch () a încercat să execute a treia interogare, va arunca BatchUpdateException.
- În blocul de captură BatchUpdateException, am apelat la metoda getUpdateCounts () pentru a obține starea rândului actualizat.
- Folosind bucla pentru, verificăm unul câte unul dacă starea declarației este executată eșuată sau nu. Dacă instrucțiunea specială nu eșuează, atunci va imprima numărul rândului declarației.
- După aceea, va imprima printStackTrace din BatchUpdateException.
- În exemplul de mai sus, deoarece excepția a avut loc din cauza celei de-a treia declarații, deci declarația 1 și 2 au fost tipărite. Apoi, urma completă a excepției a fost tipărită în consola de ieșire.
Puncte de reținut:
- Excepția care a avut loc din cauza bazei de date va intra sub SQLException.
- Excepțiile din Java pot fi gestionate folosind blocul try: catch.
- SQLException este excepția verificată, astfel încât să o putem gestiona folosind blocul try: catch.
- Avem câteva subclase de SQLException. Acestea sunt SQLNonTransientException, SQLTransientException, SQLRecoverableException, BatchUpdateException și SQLClientInfoException.
întrebări frecvente
Q # 1) Ce este o excepție SQL?
Răspuns: A apărut o excepție din cauza bazei de date, cunoscută sub numele de SQL Exception. O excepție care oferă informații despre baza de date este, de asemenea, cunoscută sub numele de Excepție SQL. Avem o clasă SQLException în Java, care este utilizată pentru a furniza informații despre excepție. Are următoarele metode:
- getErrorCode ()
- getMessage ()
- getSQLState ()
- printStackTrace ()
- getNextException ()
Q # 2) Cum să gestionați excepția în SQL?
Răspuns: Scrieți logica de afaceri în blocul try. Dacă a apărut vreo eroare sau excepție, prindeți-o în blocul Catch și scrieți mesajul corespunzător pentru a găsi cu ușurință excepția.
Blocul Try – Catch este utilizat pentru a gestiona excepția.
Q # 3) Când poate apărea SQLException în Java?
Răspuns: SQLException apare dacă există o eroare în accesul la baza de date sau alte erori legate de baza de date. Când apare SQLException, un obiect de tip SQLException va fi trecut la clauza catch. O putem descurca în blocul Catch.
Q # 4) Ce este lanțul de excepții în Java și la ce folosește?
Răspuns: O excepție care provoacă o altă excepție este cunoscută sub numele de Excepție în lanț sau Excepție în lanț. În majoritatea cazurilor, trebuie să înlănțuim excepția astfel încât să se raporteze o excepție cu o altă excepție, aceasta va face jurnalele clare și ușoare de urmărire. Va fi util pentru programator în procesul de depanare.
De exemplu:
Luați în considerare o metodă care aruncă o excepție aritmetică datorită împărțirii la zero. Cauza efectivă a excepției este o eroare I / O, care face ca divizorul să fie zero. Metoda va arunca doar o excepție aritmetică către programator. Astfel încât apelantul / programatorul să nu afle despre cauza reală a excepției. În acest tip de situație, putem folosi o excepție înlănțuită.
Concluzie
Excepțiile pot fi gestionate folosind un bloc de încercare sau aruncându-l. Excepțiile apărute din cauza bazei de date sunt cunoscute sub numele de SQLException. Avem o clasă separată pentru SQLException, care este o subclasă a Excepției. Avem metodele pentru a afla mai multe despre excepția SQL.
Metodele sunt getMessage (), getErrorCode (), getSQLState (), getNextException și printStackTace. getNextException va fi utilizat în cazul Exception Chained.
Lectură recomandată
- Excepții Java și gestionarea excepțiilor cu exemple
- Top 10 excepții de seleniu și cum să le tratezi (cod exact)
- Ghid complet pentru gestionarea excepțiilor PL SQL cu exemple
- Tutorial de gestionare a excepțiilor C # cu exemple de cod
- Manevrarea excepțiilor în C ++
- Cum să gestionați excepția în scripturile SoapUI Groovy - Tutorialul SoapUI # 11
- Tutorial PL SQL pentru începători cu exemple | Ce este PL / SQL
- Pachet PL SQL: Tutorial pachet Oracle PL / SQL cu exemple