Android SQLite 约束冲突。 Try/Catch 抓不到

标签 android sqlite try-catch constraints

08-02 16:26:24.750: E/Database(28841): Error inserting data
08-02 16:26:24.750: E/Database(28841): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
08-02 16:26:24.750: E/Database(28841):  at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
08-02 16:26:24.750: E/Database(28841):  at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:61)
08-02 16:26:24.750: E/Database(28841):  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1584)
08-02 16:26:24.750: E/Database(28841):  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1428)
08-02 16:26:24.750: E/Database(28841):  at com.app.android.DataOperations.insertItems(DataOperations.java:69)
08-02 16:26:24.750: E/Database(28841):  at com.app.android.DownloadTask.createDatabase(DownloadTask.java:173)
08-02 16:26:24.750: E/Database(28841):  at com.app.android.DownloadTask.doInBackground(DownloadTask.java:59)
08-02 16:26:24.750: E/Database(28841):  at com.app.android.DownloadTask.doInBackground(DownloadTask.java:1)
08-02 16:26:24.750: E/Database(28841):  at android.os.AsyncTask$2.call(AsyncTask.java:185)
08-02 16:26:24.750: E/Database(28841):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
08-02 16:26:24.750: E/Database(28841):  at java.util.concurrent.FutureTask.run(FutureTask.java:138)
08-02 16:26:24.750: E/Database(28841):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
08-02 16:26:24.750: E/Database(28841):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
08-02 16:26:24.750: E/Database(28841):  at java.lang.Thread.run(Thread.java:1019)

以上是我的 LogCat 报告。我要做的是插入数据。查看logcat后我发现这是一个约束违规。我试着把我的代码写成:

public void insert(...){
            long insertID = 0;
            try{
                Log.i("DataOperation", String.valueOf(insertID));
                insertID = sqllitedb.insert(DBase.TABLE_NAME, null, contentValues);
            }catch(android.database.sqlite.SQLiteException ex){
                Log.i("dataops_", "Error Constraint"); //Print
            }

}

什么都没发生。我的 logcat 充满了堆栈跟踪。没有注释行的符号(见上文)。

如何处理。 注意我的整个程序中只有一个插入语句(如上)。测试OK然后我继续。

同时告诉我如何处理我的数据库是否已创建/是否已经存在,这样如果存在我将不会运行我的 DownloadTask。

最佳答案

也许 insert(..) 方法本身捕获异常。

改用 insertOrThrow(..) 方法。

    try {
        SQLiteDatabase db = SQLiteHelper.getDatabase();
        db.insertOrThrow(Table, nullColumnHack, values);
    } catch (SQLiteConstraintException e) {
        Log.d(TAG, "failure to insert word,", e);
        return false;
    }

关于Android SQLite 约束冲突。 Try/Catch 抓不到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11776356/

相关文章:

android - 如何在 Activity 从 Web 服务请求 SoapObject 时实现 ProgressDialog?

java - Dorbell 集成错误 - 构造函数未定义

ios - 使用 sqlite objective c 以编程方式创建 2 个表不起作用

java-如何创建延迟一定时间的字符串检查?

node.js - 如何防止 node.js 崩溃?尝试捕捉不起作用

c# - 将匿名类型设置为 null

android - 事件被多次接收 - Greenrobot eventbus

安卓 :How can i draw a image a number of time using for loop

java - ActiveAndroid抽象类表

python - 将计时器存储在 SQLite 数据库中 - python