2013-08-18 55 views
0

我正在使用contentvalues事務的sqlite插入。下面的代碼不會生成任何異常,但是不會插入數據。SQLite事務失敗

我想念一些事情嗎?謝謝。

public boolean addRecord(Rec rec) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    db.beginTransaction(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_ID, rec.get()); 

    // Inserting Row 
    try { 
     db.insertOrThrow(TABLE_RECORDS, null, values); 
    } catch (SQLException e) { 

     e.printStackTrace(); 
    } 
db.endTransaction(); 
    db.close(); 
    return true; 
} 
+0

你跟蹤了你的堆棧跟蹤嗎?如果沒有,那就去做吧。 。 。 –

回答

3

調用beginTransaction後,您必須呼叫setTransactionSuccessful,以確保交易被提交。沒有這個調用,事務中的任何更改都會回滾。

db.beginTransaction(); 
try { 
    ... 
    db.setTransactionSuccessful(); 
} finally { 
    db.endTransaction(); 
} 

這種特殊的結構保證了在實際的數據庫代碼任何異常將導致回滾。

(如果發生異常,只是吞下它是一個糟糕的主意;整個功能必須失敗。)