未捕获SQLiteConstraintException

问题描述 投票:9回答:3

这段代码有什么问题?它没有捕捉到由 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) 

这是android sqlite。这一行是在调用插入方法的时候。

java android exception-handling try-catch
3个回答
41
投票

SQLiteDatabase.insert()方法用于处理数据库写入的情况,如果写入失败,不需要解开堆栈。如果你想在插入数据库时捕获异常,可以使用 SQLite.insertOrThrow() 方法,它将抛出一个异常,然后你可以抓住并处理这个异常。它将抛出一个异常,然后你可以捕捉并处理这个异常。


3
投票

你只捕捉类型为 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
投票

@bogdan 除了这个地方,你还有没有在其他地方调用insertChild(child);你有没有在try块中设置一个跟踪,以了解它是否来到这个块,并打印出下面的跟踪。

try { Log.i(" comes here"); childDbOps.insertChild(child); }。

让我知道。

© www.soinside.com 2019 - 2024. All rights reserved.