Android SQLiteDatabase WHERE语句中断UPDATE

时间:2017-06-15 08:40:50

标签: java android sqlite

我正在尝试更新 SQLiteDatabase 但由于某种原因,更新始终失败并返回0(行已更新)。

如果我删除 String selection = null; ,那么所有行都会更新,但我只想更新行 WHERE eId =?并提供eId。 ContentValues中的所有值都是正确的且非null。现在已经把我的大脑绞了好几个小时......可能会有一个新鲜的眼睛对此有所帮助,在此先感谢!

注意: propertyItem 是正常的,来自我的表单的所有值都是正确的。当我使用选择变量时,问题在更新时中断。

/// COLUMN_NAME_EID == "eId"
public int updatePropertyItem (PropertyItem propertyItem) {
    SQLiteDatabase db = mDbHelper.getWritableDatabase();

    ContentValues values = new ContentValues();
    if ( propertyItem.title != null )values.put(DatabaseContract.DataEntry.COLUMN_NAME_TITLE, propertyItem.title);
    if ( propertyItem.category != null ) values.put(DatabaseContract.DataEntry.COLUMN_NAME_CATEGORY, propertyItem.category);
    if ( propertyItem.serial != null ) values.put(DatabaseContract.DataEntry.COLUMN_NAME_SERIAL, propertyItem.serial);
    if ( propertyItem.note != null ) values.put(DatabaseContract.DataEntry.COLUMN_NAME_NOTE, propertyItem.note);
    if ( propertyItem.purchaseDate != null ) values.put(DatabaseContract.DataEntry.COLUMN_NAME_PURCHASE_DATE, propertyItem.purchaseDate);
    if ( propertyItem.currentValue != null ) values.put(DatabaseContract.DataEntry.COLUMN_NAME_CURRENT_VALUE, propertyItem.currentValue);
    if ( propertyItem.replacementValue != null ) values.put(DatabaseContract.DataEntry.COLUMN_NAME_REPLACE_VALUE, propertyItem.replacementValue);
    if ( propertyItem.store != null ) values.put(DatabaseContract.DataEntry.COLUMN_NAME_STORE, propertyItem.store);
    values.put(DatabaseContract.DataEntry.COLUMN_NAME_WARRANTY, propertyItem.warranty);
    values.put(DatabaseContract.DataEntry.COLUMN_NAME_FAVORITE, propertyItem.favorite);

    String selection = DatabaseContract.DataEntry.COLUMN_NAME_EID + " = ? ";
    String[] selectionArgs = new String[] { String.valueOf(propertyItem.eId) };

    int rowsUpdated = db.update(DatabaseContract.DataEntry.TABLE_NAME, values, selection, selectionArgs);

    db.close();
    return rowsUpdated;
}

1 个答案:

答案 0 :(得分:0)

您可以尝试建议here

通过设置 selection = DatabaseContract.DataEntry.COLUMN_NAME_EID + "=" + propertyItem.eId;并传递null作为update

的最终参数

然后如果将来你需要扩展where条款,只需使用StringBuilder