当非唯一数据插入数据库时,我需要处理错误。我有这段代码:
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)
未插入数据,但我无法显示错误消息。如何让吐司让用户知道插入失败?
答案 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/