3

I am trying to update one column for any number of rows.

Here is the function:

public void setAwardsSyncComplete(String[] ids) {

    String inArray = StringUtils.separateCommas(ids);
    db.beginTransaction();

    try {
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL_SYNCED, true);

        int rowsAffected = db.update(TABLE, contentValues, COL_ID + " IN (" + inArray + ")", null);

    } catch (Exception e) {

        DebugLog.e("Error in transaction", e.toString());
    } finally {

        db.endTransaction();
    }
}

What is strange is that the rowsAffected returns correctly (i.e. rowsAffected > 0), but the column values remain null.

Am I overlooking something very simple here?

Thanks.

pjama
  • 3,014
  • 3
  • 26
  • 27

4 Answers4

8

As you're using transactions, you need to call db.setTransactionSuccessful(); at the end of the try clause. Without this, the update gets rolled back.

See SQLiteDatabase.beginTransaction

Hope this helps,

Phil Lello

Phil Lello
  • 8,377
  • 2
  • 25
  • 34
2

You need to call db.setTransactionSuccussful() after db.update otherwise any changes will be rolled back when you call endTransaction().

Joseph Earl
  • 23,351
  • 11
  • 76
  • 89
1

there's no explicit boolean type in sqlite tables? what data type is the COL_SYNED column you are trying to update?

and you will need to call db.setTransactionSuccussful()

kharles
  • 326
  • 5
  • 14
0

I think there is a problem on your update..

You need to loop your array and update each one by one..

    private int _rowsAffected;

    foreach (var a in inArray)
    {

    _rowsAffected= db.update(TABLE, contentValues, COL_ID + " = (" + a +")", null);

    }

    db.Commit();
    db.setTransactionSuccussful(); 


if(_rowsAffected > 0)
//Success

Regards

Crimsonland
  • 2,194
  • 3
  • 24
  • 42