如果无法插入数据,则显示错误

时间:2015-05-24 18:01:12

标签: android database android-sqlite

当非唯一数据插入数据库时​​,我需要处理错误。我有这段代码:

try {
   handler.addBookmark(new BookmarkModel(idBrand, brand, desc, types, detail, image));
   Toast.makeText(this, "Success", Toast.LENGTH_LONG).show();
}catch (SQLiteException e){
   e.printStackTrace();
   Toast.makeText(this, "Failed", Toast.LENGTH_LONG).show();
}

我这样插入:

public long addBookmark(BookmarkModel bookmark) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_ID, bookmark._id); // Must Unique
    values.put(KEY_BRAND, bookmark.brandName);
    values.put(KEY_DESC, bookmark.descTerm);
    values.put(KEY_TYPE, bookmark.type);
    values.put(KEY_DETAIL, bookmark.detail);
    values.put(KEY_IMAGE, bookmark.image);
    return db.insert(TABLE_BOOKMARK, null, values);
    //db.close();
}

发生错误的Logcat:

android.database.sqlite.SQLiteConstraintException: column id is not unique (code 19)

未插入数据,但我无法显示错误消息。如何让吐司让用户知道插入失败?

3 个答案:

答案 0 :(得分:2)

不要自己设置_id。这条线应该消失了:

values.put(KEY_ID, bookmark._id); // Must Unique

如果您的表架构正确设置了它(_id INTEGER PRIMARY KEY),那么这是自动递增的长值。你不应该在插入时触摸任何东西。

答案 1 :(得分:0)

我有一个解决方案。只需将一个id设置为PRIMARY KEY AUTOINCREMENT并设置1个文本UNIQUE。对于处理错误的方法,我使用insertOrThrow并将其与try-catch一起使用。

答案 2 :(得分:0)

您应该查看insertOrThrow()方法,如果发生这种情况,将抛出SQLiteConstraintException。

然后,您可以将插入到try / catch块中:

http://www.paulwelsh.info/jquery-plugins/hero-carousel/