2015-05-24 17 views
-1

當將非唯一數據插入數據庫時​​,需要處理錯誤。我有這樣的代碼:如果無法插入數據,則顯示錯誤

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

您應該查看insertOrThrow()方法,如果發生這種情況,將會拋出SQLiteConstraintException。

然後,你可以把你插入到一個try/catch塊:

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

自己不要設置_id。此行應消失:

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

如果你的表模式正確設置它(_id INTEGER PRIMARY KEY),那麼這是自動遞增的長期價值。沒有你應該接觸插入。

+0

我想補充的是具有唯一ID的數據,我想,當它不能處理的錯誤信息 –

0

我得到了一個解決方案。只需將一個ID設置爲PRIMARY KEY AUTOINCREMENT並設置1個文本UNIQUE即可。對於處理錯誤的方法,我使用insertOrThrow並將其與try-catch一起使用。

相關問題