2011-11-16 11 views
8

Mam pewien kod w jednej z moich aplikacji na Androida, która łapie SQLException, ale ostatnio odkryłem, że nie łapie SQLiteException. Najwyraźniej SQLiteException jest dzieckiem o wyjątku SQLException, więc dlaczego nie jest on przechwytywany? Oto kod, którego używam.Dlaczego SQLException nie przechwytuje SQLiteExcpetion?

try { 
    ... // something here that will throw an SQLiteException 
} catch (SQLException e) { 
    e.printStackTrace(); 
} 

Czy moje założenie jest prawidłowe, że powinienem złapać SQLiteException?

Jeśli to ma znaczenie, używam tego kodu nie wewnątrz działania, ale wewnątrz klasy, która rozszerza klasę Application.

Jako notatkę dodatkową, dodałem dodatkową catch(Exception e){}, aby sprawdzić, czy to zadziała i rzeczywiście działało zgodnie z oczekiwaniami.

+1

dość interesujące pytanie właściwie ... ponieważ jest to podklasa klasy SQLException: http://developer.android.com/reference/android/database/sqlite/SQLiteException.html –

Odpowiedz

16

Istnieją dwa rodzaje SQLException:

android.database.SQLException 
java.sql.SQLException 

upewnij się, że używasz pierwszy nie drugi.

+2

Dzięki, rzeczywiście używałem java.sql.SQLException. Uważaj na Eclipse! – Pzanno

+0

Lubię zapach nauki po południu. Pachnie jak ... * nauka facepalmu *. –

3

Czy moje założenie jest poprawne, że powinienem łapać SQLiteException?

Czy mówisz o java.sql.SQLException lub android.database.SQLException?

SQLiteException rozszerza android.database.SQLException. Sprawdź swój import.

+0

Miałeś rację, złapałem Javę .sql.SQLException, dziękuję. – Pzanno

Powiązane problemy