jdbc exception handling how handle sql exceptions
која је најбоља адреса е-поште за употребу
Овај водич за руковање изузецима ЈДБЦ објашњава начине за руковање СКЛ изузецима уз помоћ примера програмирања:
У ЈДБЦ управљање трансакцијама туториал оф ЈДБЦ туториал сериес , научили смо ЈДБЦ типове трансакција, типове података, методе управљања трансакцијама и како их користити у Јава програмима.
У овом упутству ћемо научити о изузецима у ЈДБЦ-у и како се њима руковати. У ЈДБЦ-у, ако се изузетак догодио због повезаности базе података или било чега што је повезано са ДБ-ом, доћи ће под СКЛЕкцептион. Овде ћемо видети више информација о СКЛЕкцептионс.
Спремимо се да научимо о изузецима у ЈДБЦ.
Шта ћете научити:
Руковање изузецима ЈДБЦ
Изузеци се јављају када постоји грешка или упозорење у извршавању програма. Када се догоди изузетак, нормални ток програма ће се пореметити и програм ће се абнормално прекинути. Добра ствар у вези са изузетком је што се можемо носити са њим помоћу блока три-цатцх или кључне речи тхровс. Сви изузеци и грешке су поткласе класе Тхровабле. Тхровабле цласс је основна класа свих изузетака и грешака.
Јава Екцептион Хандлинг Кључне речи
У Јава Екцептион Хандлинг-у постоји пет кључних речи. Они су следећи:
- Покушати: Изјаве програма које могу довести до изузетка требале би се чувати у блоку три.
- Улов: Ако се догоди било који изузетак у блоку три, биће бачен. Тај изузетак можемо ухватити помоћу блока Цатцх и обрадити га у коду.
- Баци: Системски генерисане изузетке аутоматски баца ЈВМ. Да бисмо ручно бацали изузетке, требало би да користимо бацање кључне речи.
- Баца: Сваки изузетак који је избачен из методе требао би бити наведен клаузулом тхровс.
- Коначно: Све програмске изјаве које се морају извршити након блока три требале би се чувати у блоку коначно.
>> Кликните овде за више информација о изузецима на Јави.
СКЛЕкцептион
У ЈДБЦ можемо добити изузетке када извршимо или креирамо упит. Изузеци који се јављају због базе података или управљачког програма спадају у СКЛ изузетак. Користећи руковање изузетком, можемо се носити са СКЛ изузетком као што радимо са нормалним изузетком.
СКЛЕкцептион је доступан у пакету јава.скл. Проширује класу Екцептион што значи да можемо користити методе доступне у класи Екцептион и у класи СКЛЕкцептион.
Пример за СКЛ изузетак
Синтаксичка грешка у СКЛ изразу може резултирати СКЛ изузетком. Када се догоди такав изузетак, објекат класе СКЛЕкцептион проследиће се блоку цатцх. Користећи информације у објекту СКЛЕкцептион, можемо ухватити тај изузетак и наставити програм.
Објекат СКЛЕкцептион има следеће методе:
Назив методе | Опис |
---|---|
гетЕррорЦоде () | Враћа број грешке |
гетМессаге () | Враћа поруку о грешци |
гетСКЛСтате () | Враћа СКЛСтате објекта СКЛЕкцептион. Такође може вратити нулу. За грешку базе података, вратит ће КСОПЕН СКЛ стање |
гетНектЕкцептион () | Враћа следећи изузетак у ланцу изузетака. |
принтСтацкТраце () | Штампа тренутни изузетак и његову повратну путању у стандардни ток грешке |
сетНектЕкцептион (СКЛЕКСцептион ек) | Користи се за додавање још једног СКЛ изузетка у ланцу |
Како поступати са изузецима
Изузетак везан за ЈДБЦ углавном баца СКЛЕкцептион, а то је проверени изузетак па га морамо или ухватити или бацити. Сва пословна логика и подаци урезивања требају се вршити у блоку Три, ако се у блоку догодио неки изузетак, требали бисмо га ухватити и обрадити у блоку Цатцх. На основу типа изузетка, требало би да извршимо враћања или да извршимо урезивање у блоку Цатцх.
Категорије СКЛЕкцептион
Понекад ЈДБЦ управљачки програм може бацити подкласу СКЛЕкцептион која представља заједничко СКЛ стање или уобичајено стање грешке које посебно није повезано са одређеном вредношћу класе СКЛ стања. Натераће вас да се изузећем бавите на одређенији начин, а ми то можемо да решимо у нашем коду. Ове врсте изузетака спадају у подкласе једног од следећих изузетака:
- СКЛНонТрансиентЕкцептион: Ова врста изузетка ће се избацити када инстанца у којој поновни покушај исте операције не успе, осим ако није исправљен узрок СКЛЕкцептион.
- СКЛТрансиентЕкцептион: Ова врста изузетка биће избачена када је претходно неуспела операција успела када смо поново покушали операцију без икаквих промена / интервенција.
- СКЛРецовераблеЕкцептион: Ова врста изузетка биће избачена када претходно неуспешна операција може успети када смо поново покушали операцију уз било какву промену / интервенцију апликације. При томе тренутну везу треба прекинути и отворити нову везу.
Остале подкласе СКЛЕкцептион:
Следе подкласе СКЛЕкцептион:
- БатцхУпдатеЕкцептион: Ова врста изузетка ће се избацити ако се догоди нека грешка током извођења серијског ажурирања. Поред информација о СКЛЕкцептион, БатцхУпдатеЕкцептион пружа статус израза који су извршени / ажурирани пре него што је дошло до грешке.
- СКЛЦлиентИнфоЕкцептион: Ова врста изузетка ће се избацити ако једно или више својстава информација не може бити постављено на вези. Поред информација о СКЛЕкцептион, СКЛЦлиентИнфоЕкцептион је и листа својстава информација о клијенту која нису постављена.
У овом упутству видећемо нормалан СКЛЕкцептион, а затим БатцхУпдатеЕкцептион. Можете да вежбате преостале подкласе СКЛЕкцептион на вашем систему.
У следећем примеру ћемо детаљније објаснити како се носити са изузетком.
Сви програми су написани на Јави, у овом упутству. Користили смо верзију Јава 8 и Орацле ДБ.
>> Кликните овде да бисте преузели Орацле софтвер
>> Кликните овде за преузимање Јава верзије 8
Има корак-по-корак процеса инсталације Јаве.
Пример програма изузетака
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(); } } }
Излаз:
Објашњење:
# 1) Направио је један упит за одабир који има назив колоне који није у табели ЕМПЛОИЕЕ_ДЕТАИЛС.
Направи упит:
String update_query = 'update employee_details set email='martinL@gmail.com' where empNum1 = 10011';
#два) Креирали сте везу, израз и извршили одабрани КУЕРИ у блоку три.
# 3) У блоку Цатцх решили смо изузетак.
# 4) Приказујемо грешку изузетка методом гетЕррор (), СКЛСтате изузетка методом гетСКЛСтате (), поруку изузетка методом гетМессаге () и исписујемо траг стека изузетка методом принтСтацкТраце.
Пример БатцхУпдатеЕкцептион
Креирали смо једну нову табелу која илуструје пример БатцхУпдатеЕкцептион. Назив табеле је ЗАПОСЛЕНИ. Има 3 колоне.
Су:
- ИД који је примарни кључ
- ПРЕЗИМЕ
- ИМЕ
Синтакса за креирање табеле у ОРАЦЛЕ ДБ:
CREATE TABLE EMPLOYEE ( ID int NOT NULL PRIMARY KEY, LastName varchar(255), FirstName varchar(255) );
Јава програм:
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(); } } }
ИЗЛАЗ:
Објашњење:
Оно што смо урадили у горњем програму је да смо креирали 3 ИНСЕРТ упита, додали га у пакету и извршили. 3рдупит има исту вредност ид 1ступит пошто је ИД колона примарни кључ табеле ЕМПЛОИЕЕ, програм је бацио БатцхУпдатеЕкцептион.
- Креирао је 3 упита за уметање да би их убацио у табелу ЗАПОСЛЕНИ. Први и трећи упит имају исту вредност ИД-а. Колона ид је примарни кључ табеле ЕМПЛОИЕЕ.
- Направио је објект изјаве и додао му 3 упита помоћу методе аддБатцх (). Тада се зове метода екецутеБатцх () за његово извршење.
- Пошто први и трећи упит имају исту вредност ИД-а. Када је екецутеБатцх () покушао да изврши трећи упит, бациће БатцхУпдатеЕкцептион.
- У блоку БатцхУпдатеЕкцептион цатцх позвали смо методу гетУпдатеЦоунтс () да бисмо добили статус ажурираног реда.
- Користећи фор петљу, проверавамо један по један да ли је статус одређене наредбе извршен неуспешно или не. Ако одређена изјава не успије, исписат ће се број реда изјаве.
- Након тога ће исписати принтСтацкТраце БатцхУпдатеЕкцептион.
- У горњем примеру, пошто се изузетак догодио због треће изјаве, исписи 1 и 2 су одштампани. Тада је пуни траг изузетка одштампан у излазној конзоли.
Тачке које треба запамтити:
- Изузетак који се догодио због базе података наћи ће се под СКЛЕкцептион.
- Изузеци у Јави могу се обрадити помоћу блока три: цатцх.
- СКЛЕкцептион је означени изузетак, тако да се можемо носити са њим помоћу блока три: цатцх.
- Имамо неке подкласе СКЛЕкцептион. То су СКЛНонТрансиентЕкцептион, СКЛТрансиентЕкцептион, СКЛРецовераблеЕкцептион, БатцхУпдатеЕкцептион и СКЛЦлиентИнфоЕкцептион.
Често постављана питања
П # 1) Шта је СКЛ изузетак?
Одговор: До изузећа је дошло због базе података познате као СКЛ изузетак. Изузетак који пружа информације о базама података познат је и као СКЛ изузетак. Имамо класу СКЛЕкцептион на Јави која се користи за пружање информација о изузетку. Има следеће методе:
- гетЕррорЦоде ()
- гетМессаге ()
- гетСКЛСтате ()
- принтСтацкТраце ()
- гетНектЕкцептион ()
П # 2) Како поступати са изузетком у СКЛ-у?
Одговор: Напишите пословну логику у блок три. Ако се у њему догодила нека грешка или изузетак, ухватите је у блоку Цатцх и напишите одговарајућу поруку да бисте изузетак лако пронашли.
Блок Три-Цатцх користи се за руковање изузетком.
П # 3) Када се СКЛЕкцептион може појавити на Јави?
Одговор: СКЛЕкцептион се јавља ако постоји грешка у приступу бази података или друге грешке повезане са базом података. Када се догоди СКЛЕкцептион, објект типа СКЛЕкцептион проследиће се клаузули цатцх. То можемо ријешити у блоку Цатцх.
П # 4) Шта је ланац изузетака у Јави и од које користи?
Одговор: Један изузетак који узрокује други изузетак познат је као ланац изузетака или ланчани изузетак. У већини случајева морамо изузетак повезати тако да повезујемо један изузетак са другим изузетком, што ће дневницима учинити јасним и лако праћење. Програмеру ће бити корисно у процесу отклањања грешака.
На пример:
Размотримо методу која доноси аритметички изузетак због дељења са нулом. Стварни узрок изузетка је И / О грешка, због чега је делилац нула. Метода ће програмеру послати само аритметички изузетак. Тако да позивалац / програмер неће сазнати о стварном узроку изузетка. У овој врсти ситуације можемо користити оковани изузетак.
Закључак
Изузеци се могу решити помоћу блока три-цатцх или бацањем. Изузеци настали због базе података познате су као СКЛЕкцептион. Имамо засебну класу за СКЛЕкцептион која је подкласа Екцептион. Имамо методе како бисмо прецизније упознали СКЛ изузетак.
Методе су гетМессаге (), гетЕррорЦоде (), гетСКЛСтате (), гетНектЕкцептион и принтСтацкТаце. гетНектЕкцептион ће се користити у случају ланца изузетака.
Препоручено читање
- Јава изузеци и руковање изузецима са примерима
- 10 најбољих изузетака селена и како поступати са њима (тачан код)
- Комплетан водич за руковање изузецима ПЛ СКЛ-а са примерима
- Водич за руковање изузецима за Ц # са примерима кода
- Руковање изузецима у Ц ++
- Како се рукује изузетком у СоапУИ Гроови скриптама - Водич за СоапУИ бр. 11
- ПЛ СКЛ лекције за почетнике са примерима | Шта је ПЛ / СКЛ
- ПЛ СКЛ пакет: Водич за Орацле ПЛ / СКЛ пакет са примерима