SQLiteConstraintException не перехвачен - PullRequest
9 голосов
/ 06 августа 2010

В чем проблема с этим кодом? Он не перехватывает исключение, выданное методом insertChild().

childDbOps.open();
try {
    childDbOps.insertChild(child);
} catch (SQLiteException exception) {
    Log.i("error la inserare child", "on the next line");
    exception.printStackTrace();
} finally {
    childDbOps.close();
}

Ошибка:

ERROR/Database(320): android.database.sqlite.SQLiteConstraintException: error code 19: 
constraint failed at com.android.dataLayer.DbAdapter.insertChild(DbAdapter.java:169) 
  at com.android.activities.ChildInsertActivity.onClick(ChildInsertActivity.java:203) 
  at android.view.View.performClick(View.java:2344) 

Это андроид sqlite. Строка, когда вызывается метод вставки.

Ответы [ 3 ]

39 голосов
/ 04 февраля 2011

Метод SQLiteDatabase.insert () используется в тех случаях, когда вы хотите обрабатывать записи в базу данных без разматывания стека в случае сбоя записи. Если вы хотите перехватывать исключения при вставке в базу данных, используйте метод [SQLite.insertOrThrow (] [1]). Он сгенерирует исключение, которое вы можете затем перехватить и обработать.

[1]: http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#insertOrThrow(java.lang.String, java.lang.String, android.content.ContentValues)

3 голосов
/ 06 августа 2010

Вы ловите только исключения типа SQLiteException.Если метод insertChild выдает любое другое исключение, оно не будет перехвачено.

try {
   childDbOps.insertChild(child);
}
catch(SQLiteException exception) {
  Log.i("error la inserare child", "on the next line");
  exception.printStackTrace();
}
catch(AnotherException exception) {
  //handle it
}
//Catch them all here
catch(Exception exception) {
  //handle it: must handle it, don't just swallow it.
}
finally {
  childDbOps.close();
}
0 голосов
/ 06 августа 2010

@ Богдан, есть ли другое место, где вы вызываете insertChild (child);кроме этого места.Вы поместили трассировку в блок try, чтобы узнать, подходит ли он к этому блоку, и распечатайте трассировку, как показано ниже.

try {Log.i ("идет сюда");
childDbOps.insertChild(ребенок);}

дайте мне знать.

...