【发布时间】:2013-01-27 05:07:38
【问题描述】:
我是第一次使用 SQLite,并且正在尝试学习它的异常处理,所以我在我的测试应用程序中强制插入错误。发生异常,我看到它已写入 Eclipse LogCat 输出窗口。但是它不会被代码捕获。我在这里看到了关于确保使用正确的异常类型的其他问题,并认为我做对了。知道我错过了什么吗?
在我的主要活动中的以下语句中,myTable 是一个扩展我自己的AbstractDbAdapter 的类(它有一个扩展SQLiteOpenHelper 的类DatabaseHelper)。
try {
myTable.create("dupkey");
}
catch (android.database.sqlite.SQLiteConstraintException e) {
Log.e(TAG, "SQLiteConstraintException:" + e.getMessage());
}
catch (android.database.sqlite.SQLiteException e) {
Log.e(TAG, "SQLiteException:" + e.getMessage());
}
catch (Exception e) {
Log.e(TAG, "Exception:" + e.getMessage());
}
示例堆栈跟踪:
Error inserting id="dupkey" last_seen_ts=1360624732 first_seen_ts=1360624732 android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:61)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1582)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)
at com.myCompany.testApp.myTable_DbAdapter.create(myTable_DbAdapter.java:51)
myTable 和 AbstractDbAdapter 类:
【问题讨论】:
-
请贴出
myTable_DbAdapter.create()的代码并注明第51 行的位置。另外,什么类和方法包含您提供的代码? -
@Code-Guru:我添加了 myTable 类,第 51 行是 create() 方法(它不会与堆栈跟踪完全对齐,因为我删除了一些东西来简化它这个问题)。
-
@Alan 那么您可能删除了一些可以帮助我们回答您的问题的内容。请提供完整的堆栈跟踪。
-
@Code-Guru:我从 myTable 类代码中删除了几个在本示例中未使用的方法,堆栈跟踪是从 LogCat 窗口复制的。
标签: android sqlite exception-handling