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

Show error if data cannot be inserted

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

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)

数据没有插入,但我无法显示错误信息。我怎样才能显示祝酒词让用户知道插入失败?

不要自己设置_id。这一行应该消失了:

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

如果您的 table 架构设置正确 (_id INTEGER PRIMARY KEY),那么这是自动递增的 long 值。插入时没有任何内容。

我找到了解决办法。只需将 id 设置为 PRIMARY KEY AUTOINCREMENT 并设置 1 text UNIQUE 。对于处理错误的方法,我使用 insertOrThrow 并将其与 try-catch 一起使用。

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

然后,您可以将插入内容放入 try/catch 块中:

try{
   db.insertOrThrow(table, columnHack, values);
} catch (SQLiteConstraintException e){
   Toast.makeText(context, "Unable to insert values.", Toast.LENGTH_SHORT).show();
}