2013-08-18 4 views
0

Я работаю над встраиванием sqlite с использованием contentvalues ​​с транзакцией. Следующий код не генерирует никаких исключений, однако данные не вставлены.Ошибка транзакции 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(); 
} 

Эта конкретная конструкция гарантирует, что любое исключение в фактическом коде базы данных приведет к откату.

(Если вы получите исключение, это плохая идея, чтобы просто проглотить его, вся функция должна потерпеть неудачу.)