SQLiteException не перехватывается - PullRequest
4 голосов
/ 27 ноября 2011

Я пытаюсь поймать исключение "android.database.sqlite.SQLiteException: код ошибки 5: база данных заблокирована" с:

    try {
        db.insert("mytable", null, myvalues);
    } catch(SQLiteException e) {
        Log.d("My App", "caught");

        ...
    }

По какой-то причине я все еще получаю сообщение об ошибке, и "пойман" не отображается в LogCat. Я пытался поймать общее «исключение», но это все еще не работает. Что не так?

UPDATE Я нашел проблему, и это действительно странно: по какой-то причине изменение db.insert () на db.insertOrThrow (), как указано в goto10, магически исправило все. Ошибка исходила из той строки, но, может быть, это не было исключение, а только сбой или что-то еще?

Ответы [ 4 ]

10 голосов
/ 27 ноября 2011

Я не верю, что .insert выдаст исключение. Вы, вероятно, просто видите сообщение журнала, которое пишется им, когда оно ловит исключение внутри. Если вы хотите, чтобы он выдавал исключение при неудачной вставке, используйте .insertOrThrow.

0 голосов
/ 27 ноября 2011

Исключение, вероятно, выдается при открытии базы данных, а не при вставке новой строки.

0 голосов
/ 27 ноября 2011

Если этот блок catch не может перехватить исключение, то либо он не генерируется внутри этого конкретного блока try, либо вы получили неправильное исключение. Тот факт, что он все еще не работает, если вы поймаете Exception, говорит о том, что это первая проблема.

Так что вам нужно выяснить, где на самом деле выбрасывается исключение. Я бы попытался изменить конфигурацию регистрации, чтобы LogCat регистрировал полную трассировку стека исключений. Это должно сказать вам, где оно было брошено. Если вы не можете этого сделать, то вам нужно найти это с помощью отладчика ... или путем просмотра исходного кода ваших приложений, чтобы найти, где регистрируется исключение.

(Другая возможность заключается в том, что блок перехвата перехватывает исключение, но у вас настроены настройки ведения журнала для сброса событий журнала отладки.)

0 голосов
/ 27 ноября 2011

Попробуйте это

try { 

} catch( SQLiteException e) {
     Log.e("My App",e.toString(), e);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...