jdbc exception handling how handle sql exceptions
video prenos programske opreme s katerega koli spletnega mesta
Ta vadnica za ravnanje z izjemami JDBC razlaga načine za ravnanje z izjemami SQL s pomočjo programov:
V Upravljanje transakcij JDBC vadnica Serija vadnic JDBC smo se naučili vrste transakcij JDBC, vrste podatkov, metode upravljanja transakcij in kako jih uporabiti v programih Java.
V tej vadnici bomo spoznali izjeme v JDBC in kako z njimi ravnati. Če je v JDBC izjema prišla zaradi povezljivosti z bazo podatkov ali česar koli, kar je povezano z DB, bo prišla pod SQLException. Tu bomo videli več informacij o SQLExceptions.
Pripravimo se na spoznavanje izjem v JDBC.
Kaj se boste naučili:
Obravnava izjem JDBC
Izjeme se pojavijo, ko pride do napake ali opozorila pri izvajanju programa. Ko pride do izjeme, se moti običajni tok programa in program se nenavadno prekine. Dobra stvar izjeme je, da jo lahko obvladamo s pomočjo bloka try-catch ali ključne besede throws. Vse izjeme in napake so podrazredi razreda Throwable. Vrzljiv razred je osnovni razred vseh izjem in napak.
Java Exception Handling Keywords
V Java Exception Handling je pet ključnih besed. Ti so naslednji:
- Poskusite: Izjave o programu, ki lahko povzročijo izjemo, morajo biti v bloku preizkusa.
- Ulov: Če pride do kakršne koli izjeme v poskusnem bloku, bo vržena. To izjemo lahko ujamemo s pomočjo bloka Catch in jo obdelamo v kodi.
- Vrzi: Sistemsko ustvarjene izjeme samodejno vrne JVM. Da bi ročno vrgli izjeme, bi morali uporabiti vrznjo ključne besede.
- Meti: Vsaka izjema, ki je bila izločena iz metode, mora biti določena s klavzulo throws.
- Končno: Vse stavke programa, ki jih je treba izvesti po poskusnem bloku, je treba hraniti v zaključnem bloku.
>> Kliknite tukaj za več informacij o izjemah v Javi.
SQLException
V JDBC lahko dobimo izjeme, ko izvedemo ali izdelamo poizvedbo. Izjeme, do katerih pride zaradi zbirke podatkov ali gonilnika, spadajo pod SQL Exception. Z uporabo izjeme lahko obvladamo izjemo SQL, kot obvladujemo običajno izjemo.
SQLException je na voljo v paketu java.sql. Razširja razred izjem, kar pomeni, da lahko uporabimo metode, ki so na voljo v razredu izjem, tudi v razredu SQLException.
Primer za izjemo SQL
Sintaksna napaka v stavku SQL lahko povzroči izjemo SQL. Ko pride do takšne izjeme, se objekt razreda SQLException preda bloku catch. Z uporabo informacij v objektu SQLException lahko ujamemo to izjemo in nadaljujemo s programom.
Objekt SQLException ima naslednje metode:
Ime metode | Opis |
---|---|
getErrorCode () | Vrne številko napake |
getMessage () | Vrne sporočilo o napaki |
getSQLState () | Vrne SQLState objekta SQLException. Vrne se lahko tudi nič. V primeru napake baze podatkov bo vrnil stanje SQL XOPEN |
getNextException () | Vrne naslednjo izjemo v verigi izjem. |
printStackTrace () | Natisne trenutno izjemo in njeno sledenje v standardni tok napak |
setNextException (SQLEXception ex) | Uporablja se za dodajanje še ene izjeme SQL v verigi |
Kako ravnati z izjemami
Izjema, povezana z JDBC, večinoma vrže SQLException in je preverjena izjema, zato jo moramo bodisi ujeti bodisi metati. Vso poslovno logiko in podatke o odobritvah je treba opraviti v bloku Try, če bi se v bloku zgodila kakšna izjema, bi morali to ujeti in obdelati v bloku Catch. Glede na vrsto izjeme bi morali v bloku Catch narediti odmike ali se zavezati.
Kategorije SQLException
Včasih lahko gonilnik JDBC vrže podrazred SQLException, ki predstavlja skupno stanje SQL ali skupno stanje napak, ki posebej ni povezano z določeno vrednostjo razreda stanja SQL. Zaradi izjeme boste ravnali natančneje, mi pa jo lahko obravnavamo v naši kodi. Te vrste izjem spadajo v podrazrede ene od naslednjih izjem:
- SQLNonTransientException: Ta vrsta izjeme bo sprožena, ko primerek, kjer ponovni poskus iste operacije ne bi uspel, razen če je bil odpravljen vzrok za SQLException.
- SQLTransientException: Ta vrsta izjeme bo sprožena, ko bo predhodno neuspešna operacija uspela, ko bomo operacijo znova poskusili brez kakršne koli spremembe / posredovanja.
- SQLRecoverableException: Ta vrsta izjeme bo sprožena, ko bo predhodno neuspešna operacija uspela, ko bomo operacijo znova poskusili s kakršno koli spremembo / posredovanjem aplikacije. Pri tem je treba trenutno povezavo zapreti in novo povezavo odpreti.
Drugi podrazredi SQLException:
Sledijo podrazredi SQLException:
- BatchUpdateException: Ta vrsta izjeme bo vržena, če se je med izvajanjem paketnega posodabljanja zgodila kakšna napaka. Poleg informacij o SQLException BatchUpdateException zagotavlja stanje stavkov, ki so bili izvedeni / posodobljeni, preden je prišlo do napake.
- SQLClientInfoException: Ta vrsta izjeme bo sprožena, če ene ali več lastnosti informacij ni mogoče nastaviti na povezavi. Poleg informacij o SQLException je SQLClientInfoException tudi seznam lastnosti informacij o odjemalcu, ki niso bile nastavljene.
V tej vadnici bomo videli normalno SQLException, nato pa BatchUpdateException. Preostale podrazrede SQLException lahko izvajate v svojem sistemu.
V naslednjem primeru bomo podrobneje opisali, kako ravnati z izjemo.
Vsi programi so v tej vadnici napisani na Javi. Uporabili smo različico Java 8 in Oracle DB.
>> Kliknite tukaj za prenos programske opreme Oracle
>> Kliknite tukaj da prenesete različico Java 8
Ima postopek namestitve Jave po korakih.
Primer izjem programa
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(); } } }
Izhod:
Pojasnilo:
# 1) Ustvaril je eno poizvedbo za izbiro, ki ima ime stolpca, ki ni v tabeli EMPLOYEE_DETAILS.
Ustvari poizvedbo:
String update_query = 'update employee_details set email='martinL@gmail.com' where empNum1 = 10011';
#two) Ustvarili smo povezavo, stavek in izvedli izbrano QUERY v poskusnem bloku.
# 3) V bloku Catch smo obravnavali izjemo.
# 4) Prikazujemo napako izjeme z metodo getError (), SQLState izjeme z metodo getSQLState (), sporočilo izjeme z metodo getMessage () in natisnemo sled izjeme z metodo printStackTrace.
Primer BatchUpdateException
Ustvarili smo novo tabelo, ki ponazarja primer BatchUpdateException. Ime tabele je ZAPOSLENI. Ima 3 stolpce.
To so:
- ID, ki je primarni ključ
- PRIIMEK
- IME
Sintaksa za ustvarjanje tabele v 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(); } } }
IZHOD:
Pojasnilo:
V zgornjem programu smo naredili 3 poizvedbe INSERT, jih dodali v paketu in izvedli. 3rdpoizvedba ima enako vrednost id 1stker je stolpec ID primarni ključ tabele EMPLOYEE, je program vrgel BatchUpdateException.
- Ustvaril je 3 poizvedbe za vstavljanje, da jih vstavite v tabelo EMPLOYEE. Prva in tretja poizvedba imata enako vrednost ID. Stolpec id je primarni ključ tabele EMPLOYEE.
- Ustvaril objekt stavka in vanj dodal te 3 poizvedbe z uporabo metode addBatch (). Nato se za njegovo izvajanje imenuje metoda executeBatch ().
- Ker imata prva in tretja poizvedba enako vrednost ID. Ko je executeBatch () poskusil izvršiti tretjo poizvedbo, bo vrgel BatchUpdateException.
- V bloku BatchUpdateException catch smo poklicali metodo getUpdateCounts (), da dobimo stanje posodobljene vrstice.
- Z zanko for preverjamo enega za drugim, ali je stanje določenega stavka izvedeno neuspešno ali ne. Če določen stavek ne uspe, bo natisnil številko vrstice stavka.
- Po tem bo natisnil printStackTrace BatchUpdateException.
- V zgornjem primeru, ker se je izjema zgodila zaradi tretjega stavka, sta bili natisnjeni izjavi 1 in 2. Nato je v izhodni konzoli natisnjena celotna sled izjeme.
Pomembne točke:
- Izjema, ki je nastala zaradi zbirke podatkov, bo vključena v SQLException.
- Izjeme v Javi je mogoče obravnavati z uporabo bloka try: catch.
- SQLException je preverjena izjema, tako da jo lahko obravnavamo z uporabo bloka try: catch.
- Imamo nekaj podrazredov SQLException. Gre za SQLNonTransientException, SQLTransientException, SQLRecoverableException, BatchUpdateException in SQLClientInfoException.
Pogosto zastavljena vprašanja
V # 1) Kaj je izjema SQL?
Odgovor: Do izjeme je prišlo zaradi zbirke podatkov, imenovane SQL Exception. Izjema, ki zagotavlja informacije o povezanih bazah podatkov, je znana tudi kot izjema SQL. V Javi imamo razred SQLException, ki se uporablja za zagotavljanje informacij o izjemi. Ima naslednje metode:
- getErrorCode ()
- getMessage ()
- getSQLState ()
- printStackTrace ()
- getNextException ()
V # 2) Kako ravnati z izjemo v SQL?
Odgovor: V blok poskus vpišite poslovno logiko. Če je prišlo do kakršne koli napake ali izjeme, jo zajemite v blok Catch in napišite ustrezno sporočilo, da boste izjemo lahko našli.
Za obdelavo izjeme se uporablja blok Try – Catch.
V # 3) Kdaj se lahko v Javi pojavi SQLException?
Odgovor: SQLException se pojavi, če pride do napake pri dostopu do baze podatkov ali drugih napak, povezanih z bazo podatkov. Ko pride do SQLException, se objekt tipa SQLException posreduje klavzuli catch. To lahko rešimo v bloku Catch.
V # 4) Kakšna je veriga izjem v Javi in kakšna je njena uporaba?
Odgovor: Ena izjema, ki povzroči drugo izjemo, je znana kot veriga izjem ali verižna izjema. V večini primerov moramo izjemo povezati tako, da je ena izjema povezana z drugo izjemo, zato bodo dnevniki jasni in enostavni za sledenje. Programerju bo v pomoč pri odpravljanju napak.
Na primer:
Razmislite o metodi, ki vrže aritmetično izjemo zaradi deljenja z nič. Dejanski vzrok izjeme je napaka V / I, zaradi česar je delilec enak nič. Metoda bo programerju vrgla le aritmetično izjemo. Tako klicatelj / programer ne bo izvedel dejanskega vzroka izjeme. V takšni situaciji lahko uporabimo verižno izjemo.
Zaključek
Izjeme je mogoče obravnavati z uporabo bloka try-catch ali tako, da ga vržete. Izjeme zaradi baze podatkov so znane kot SQLException. Za SQLException imamo ločen razred, ki je podrazred izjem. Načini imamo, da natančneje spoznamo izjemo SQL.
Metode so getMessage (), getErrorCode (), getSQLState (), getNextException in printStackTace. getNextException bo uporabljen v primeru Exception Chained.
Priporočeno branje
- Java izjeme in obravnava izjem z primeri
- 10 najboljših izjem iz selena in kako z njimi ravnati (natančna koda)
- Popoln vodnik za obravnavo izjem SQL PL z primeri
- Vadnica za ravnanje z izjemami C # s primeri kode
- Obravnava izjem v jeziku C ++
- Kako ravnati z izjemami v skriptih Groovy SoapUI - Vadnica SoapUI št. 11
- PL SQL Vadnica za začetnike s primeri | Kaj je PL / SQL
- PL SQL paket: Vadnica Oracle PL / SQL Package z primeri