jdbc exception handling how handle sql exceptions
bpo için teknik destek mülakat soruları ve cevapları
Bu JDBC Özel Durum İşleme öğreticisi, programlama örnekleri yardımıyla SQL İstisnalarını işleme yollarını açıklar:
İçinde JDBC İşlem Yönetimi öğreticisi JDBC eğitim serisi , JDBC işlem türlerini, veri türlerini, işlem yönetimi yöntemlerini ve bunların Java programlarında nasıl kullanılacağını öğrendik.
Bu eğiticide, JDBC'deki İstisnaları ve bunların nasıl ele alınacağını öğreneceğiz. JDBC'de, Veritabanı bağlantısı veya DB ile ilgili herhangi bir şey nedeniyle istisna meydana gelirse, SQLException kapsamına girecektir. Burada SQLExceptions hakkında daha fazla bilgi göreceğiz.
JDBC'deki İstisnalar hakkında bilgi edinmeye hazırlanalım.
Ne öğreneceksin:
JDBC Özel Durum İşleme
Programın yürütülmesinde bir hata veya uyarı olduğunda istisnalar oluşur. Bir istisna meydana geldiğinde, programın normal akışı bozulur ve program anormal bir şekilde sonlandırılır. İstisnanın iyi yanı, bunu bir try-catch bloğu veya throws anahtar kelimesi kullanarak halledebilmemizdir. Tüm istisnalar ve hatalar, Throwable sınıfının alt sınıflarıdır. Fırlatılabilir sınıf, tüm istisnaların ve hataların temel sınıfıdır.
Java Özel Durum İşleme Anahtar Kelimeleri
Java İstisna İşleme'de beş anahtar kelime vardır. Bunlar aşağıdaki gibidir:
- Deneyin: İstisnayı ortaya çıkarabilecek program ifadeleri bir try bloğu içinde tutulmalıdır.
- Yakalamak: Try bloğunda herhangi bir istisna meydana gelirse, atılacaktır. Bu istisnayı Catch bloğunu kullanarak yakalayabilir ve kodda işleyebiliriz.
- Atmak: Sistem tarafından oluşturulan istisnalar, JVM tarafından otomatik olarak atılır. İstisnaları manuel olarak atmak için, bir anahtar kelime atışı kullanmalıyız.
- Atar: Bir yöntemden atılan herhangi bir istisna, bir throws cümlesiyle belirtilmelidir.
- En sonunda: Try bloğundan sonra yürütülmesi gereken herhangi bir program deyimi final bloğunda tutulmalıdır.
>> Tıklayın İşte Java'daki İstisnalar hakkında daha fazla bilgi için.
SQLException
JDBC'de, sorguyu yürüttüğümüzde veya oluşturduğumuzda istisnalar alabiliriz. Veritabanı veya Sürücü nedeniyle oluşan istisnalar SQL İstisnası kapsamına girer. İstisna işlemeyi kullanarak, normal istisnayı ele aldığımız gibi SQL İstisnasını halledebiliriz.
SQLException java.sql paketinde mevcuttur. Exception sınıfını genişletir, bu da SQLException sınıfındaki Exception sınıfında bulunan yöntemleri kullanabileceğimiz anlamına gelir.
SQL İstisnası Örneği
SQL ifadesindeki sözdizimi hatası SQL İstisnasına neden olabilir. Böyle bir istisna meydana geldiğinde, SQLException sınıfının bir nesnesi catch bloğuna geçirilecektir. SQLException nesnesindeki bilgileri kullanarak, bu istisnayı yakalayabilir ve programa devam edebiliriz.
SQLException nesnesi aşağıdaki yöntemlere sahiptir:
| Yöntem Adı | Açıklama |
|---|---|
| getErrorCode () | Hata numarasını döndürür |
| getMessage () | Hata mesajını verir |
| getSQLState () | SQLException nesnesinin SQLState'ini döndürür. Aynı zamanda boş dönebilir. Veritabanı hatası için XOPEN SQL Durumu döndürür |
| getNextException () | İstisna zincirindeki bir sonraki istisnayı döndürür. |
| Yığın İzi yazdır () | Geçerli istisnayı ve geri izini standart bir hata akışına yazdırır |
| setNextException (SQLEXception istisnası) | Zincire başka bir SQL istisnası eklemek için kullanılır. |
İstisnalarla Nasıl Başa Çıkılır
JDBC ile ilgili istisna çoğunlukla SQLException atar ve bu kontrol edilen bir istisnadır, bu yüzden onu yakalamalı veya atmalıyız. Tüm iş mantığı ve commit verileri bir Try bloğunda yapılmalıdır, eğer blokta herhangi bir istisna meydana gelirse, onu Catch bloğunda yakalamalı ve işlemeliyiz. İstisna türüne bağlı olarak, geri dönüşleri yapmalıyız veya Catch bloğunda kesinleştirmeliyiz.
SQLException Kategorileri
Bazen JDBC sürücüsü, ortak bir SQL durumunu veya belirli bir SQL durum sınıf değeri ile özellikle ilişkili olmayan yaygın bir hata durumunu temsil eden SQLException alt sınıfını atabilir. İstisnayı daha spesifik bir şekilde ele almanızı sağlayacak ve bunu kodumuzda halledebiliriz. Bu tür istisnalar, aşağıdaki istisnalardan birinin alt sınıflarına girer:
- SQLNonTransientException: Bu tür bir istisna, SQLException'ın nedeni düzeltilmedikçe aynı işlemin yeniden denemesinin başarısız olacağı bir örnek olduğunda atılır.
- SQLTransientException: Bu tür bir istisna, daha önce başarısız olan bir işlem, herhangi bir değişiklik / müdahale olmadan işlemi yeniden denediğimizde başarılı olduğunda atılacaktır.
- SQLRecoverableException: Uygulama tarafından yapılan herhangi bir değişiklik / müdahale ile işlemi tekrar denediğimizde, daha önce başarısız olan bir işlem başarılı olabildiğinde bu tür bir istisna atılacaktır. Bunu yaparken mevcut bağlantı kapatılmalı ve yeni bağlantı açılmalıdır.
Diğer SQLException Alt Sınıfları:
Aşağıda SQLException alt sınıfları yer almaktadır:
- BatchUpdateException: Toplu güncelleme işlemi yapılırken herhangi bir hata meydana gelirse bu tür bir istisna atılacaktır. SQLException bilgilerinin yanı sıra, BatchUpdateException, hata oluşmadan önce yürütülen / güncellenen ifadelerin durumunu sağlar.
- SQLClientInfoException: Bu tür bir istisna, bir bağlantıda bir veya daha fazla bilgi özelliği ayarlanamazsa atılır. SQLException bilgilerinin yanı sıra, SQLClientInfoException ayarlanmamış istemci bilgileri özelliklerinin bir listesi.
Bu öğreticide normal SQLException'ı göreceğiz ve ardından BatchUpdateException'ı göreceğiz. Sisteminizde kalan SQLException alt sınıflarını deneyebilirsiniz.
Aşağıdaki örnekte, istisnayı nasıl ele alacağımızı inceleyeceğiz.
Bu eğitimde tüm programlar Java ile yazılmıştır. Java 8 sürümünü ve Oracle DB'yi kullandık.
>> Tıklayın İşte Oracle yazılımını indirmek için
>> Tıklayın İşte Java sürüm 8'i indirmek için
Adım adım Java kurulum sürecine sahiptir.
İstisnalar Örnek 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(); } } } Çıktı:

Açıklama:
# 1) EMPLOYEE_DETAILS tablosunda olmayan sütun adına sahip bir seçme sorgusu oluşturuldu.
Sorgu Oluştur:
String update_query = 'update employee_details set email='martinL@gmail.com' where empNum1 = 10011';#iki) Bağlantı, ifade oluşturuldu ve try bloğunda seçme QUERY uygulandı.
# 3) Catch bloğunda, istisnayı ele aldık.
# 4) GetError () yöntemini kullanarak istisnanın Hatasını, getSQLState () yöntemini kullanarak istisnanın SQLState'ini, getMessage () yöntemini kullanarak istisnanın mesajını ve printStackTrace yöntemini kullanarak istisnanın yığın izini yazdırıyoruz.
BatchUpdateException Örneği
BatchUpdateException örneğini göstermek için yeni bir tablo oluşturduk. Tablonun adı EMPLOYEE'dir. 3 sütunludur.
Onlar:
- Birincil anahtar olan kimlik
- SOYADI
- İSİM
ORACLE DB'de bir tablo oluşturmak için sözdizimi:
CREATE TABLE EMPLOYEE ( ID int NOT NULL PRIMARY KEY, LastName varchar(255), FirstName varchar(255) ); 
Java Programı:
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(); } } } ÇIKTI:

Açıklama:
Yukarıdaki programda yaptığımız şey 3 INSERT sorgusu oluşturduk ve bunu toplu olarak ekledik ve çalıştırdık. 3rdsorgu, 1 ile aynı kimlik değerine sahipstID sütunu EMPLOYEE tablosunun birincil anahtarı olduğundan sorgu, program bir BatchUpdateException oluşturdu.
- EMPLOYEE tablosuna eklemek için 3 insert sorgusu oluşturuldu. Birinci ve üçüncü sorgu aynı kimlik değerine sahiptir. Kimlik sütunu EMPLOYEE tablosunun birincil anahtarıdır.
- İfade nesnesi oluşturuldu ve addBatch () yöntemini kullanarak bu 3 sorguyu buna ekledi. Daha sonra yürütmek için executeBatch () yöntemi çağrıldı.
- Birinci ve üçüncü sorgu aynı ID değerine sahip olduğundan. ExecuteBatch () üçüncü sorguyu yürütmeyi denediğinde, BatchUpdateException oluşturur.
- BatchUpdateException catch bloğunda, güncellenmiş satırın durumunu almak için getUpdateCounts () yöntemini çağırdık.
- For döngüsünü kullanarak, belirli bir ifadenin durumunun başarısız olup olmadığını tek tek kontrol ediyoruz. Belirli ifade başarısız değilse, ifadenin satır numarasını yazdıracaktır.
- Bundan sonra, BatchUpdateException'ın printStackTrace'ini yazdıracaktır.
- Yukarıdaki örnekte, istisna üçüncü ifade nedeniyle meydana geldiğinden, 1 ve 2 ifadeleri yazdırılmıştır. Ardından, istisnanın tam izi çıktı konsolunda yazdırılır.
Hatırlanacak noktalar:
- Veritabanı nedeniyle meydana gelen istisna SQLException kapsamına girecektir.
- Java'daki istisnalar try: catch bloğu kullanılarak ele alınabilir.
- SQLException kontrol edilen istisnadır, bu yüzden try: catch bloğunu kullanarak bunu halledebiliriz.
- SQLException'ın bazı alt sınıflarına sahibiz. Bunlar SQLNonTransientException, SQLTransientException, SQLRecoverableException, BatchUpdateException ve SQLClientInfoException'dır.
Sıkça Sorulan Sorular
S # 1) SQL İstisnası nedir?
Cevap: Veritabanı nedeniyle bir istisna oluştu SQL İstisnası olarak bilinir. Veritabanıyla ilgili bilgiler sağlayan bir istisna, SQL İstisnası olarak da bilinir. Java'da istisna hakkında bilgi sağlamak için kullanılan bir SQLException sınıfımız var. Aşağıdaki yöntemlere sahiptir:
- getErrorCode ()
- getMessage ()
- getSQLState ()
- Yığın İzi yazdır ()
- getNextException ()
S # 2) SQL'de istisna nasıl ele alınır?
Cevap: İş mantığını try bloğuna yazın. İçinde herhangi bir hata veya istisna meydana gelmişse, bunu Catch bloğunda yakalayın ve istisnayı kolayca bulmak için uygun mesajı yazın.
Try – Catch bloğu istisnayı işlemek için kullanılır.
S # 3) Java'da SQLException ne zaman ortaya çıkabilir?
Cevap: Veritabanı erişiminde bir hata veya veritabanıyla ilgili diğer hatalar varsa SQLException oluşur. SQLException meydana geldiğinde, catch deyimine SQLException türünde bir nesne geçirilecektir. Catch bloğunda halledebiliriz.
S # 4) Java'daki İstisna zinciri nedir ve kullanımı nedir?
Cevap: Başka bir özel duruma neden olan bir istisna, İstisna Zinciri veya Zincirleme İstisna olarak bilinir. Çoğu durumda, bir istisnayı başka bir istisnayla ilişkilendirecek şekilde bir istisnayı zincirlememiz gerekir; bu, günlükleri net ve kolay izlenebilir hale getirir. Hata ayıklama sürecinde programcıya yardımcı olacaktır.
Örneğin:
Sıfıra bölme nedeniyle bir Aritmetik istisna atan bir yöntem düşünün. İstisnanın gerçek nedeni, bölenin sıfır olmasını sağlayan bir G / Ç hatasıdır. Yöntem, programcıya yalnızca bir Aritmetik istisna atacaktır. Böylece arayan / programcı İstisnanın gerçek nedenini öğrenemeyecektir. Bu tür bir durumda, zincirleme bir istisna kullanabiliriz.
Sonuç
İstisnalar, bir dene-yakala bloğu kullanılarak veya fırlatılarak ele alınabilir. Veritabanı nedeniyle oluşan istisnalar SQLException olarak bilinir. Exception'ın bir alt sınıfı olan SQLException için ayrı bir sınıfımız var. SQL istisnasını daha spesifik olarak tanımak için yöntemlere sahibiz.
Yöntemler getMessage (), getErrorCode (), getSQLState (), getNextException ve printStackTace'dir. getNextException, Zincirleme İstisna durumunda kullanılacaktır.
Önerilen Kaynaklar
- Java İstisnaları ve Örneklerle İstisna İşlemleri
- İlk 10 Selenyum İstisnası ve Bunlarla Nasıl Başa Çıkılır (Tam Kod)
- Örneklerle PL SQL İstisna İşlemi İçin Eksiksiz Kılavuz
- Kod Örnekleriyle C # İstisna İşleme Eğitimi
- C ++ 'da Özel Durum İşleme
- SoapUI Harika Komut Dosyalarında İstisna Nasıl İşlenir - SoapUI Eğitimi # 11
- Örneklerle Yeni Başlayanlar İçin PL SQL Eğitimi | PL / SQL Nedir
- PL SQL Paketi: Örneklerle Oracle PL / SQL Paketi Eğitimi