【问题标题】:Android SQLiteDatabase WHERE statement breaks UPDATEAndroid SQLiteDatabase WHERE 语句中断 UPDATE
【发布时间】:2017-06-15 08:40:49
【问题描述】:

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

如果我删除 String selection = null;,那么所有行都会更新,但我只想更新行 WHERE eId = ? 并提供 eId。 ContentValues 中的所有值都是正确且非空的。已经绞尽脑汁好几个小时了。也许重新审视这件事会有所帮助,在此先感谢!

注意: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;
}

【问题讨论】:

  • 您是否尝试过使用更新为int rowsUpdated = db.update(DatabaseContract.DataEntry.TABLE_NAME, values, DatabaseContract.DataEntry.COLUMN_NAME_EID + " = " + propertyItem.eId, null)
  • 您确定数据库中存储有提供 eId 的寄存器吗?
  • 我可以知道DatabaseContract.DataEntry.COLUMN_NAME_EID 列的数据类型吗?
  • 您正在为此 Column 值传递字符串,因此您必须将字符串用单引号括起来,例如:'propertyItem.eId'。
  • 我在 ListView 中有一个属性项列表,所以我知道这些项存在于数据库中。 propertyItem.eId 不为空,我尝试过使用单引号。 COLUMN_NAME_EID 是一个字符串

标签: java android sqlite


【解决方案1】:

你可以试试here的建议

通过设置 selection = DatabaseContract.DataEntry.COLUMN_NAME_EID + "=" + propertyItem.eId; 并传递 null 作为 update 的最后一个参数

如果将来您需要扩展 where 子句,只需使用 StringBuilder

【讨论】:

  • 我尝试将 selectionArgs 传递为 null,也没有运气。
猜你喜欢
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
  • 2012-03-15
  • 2016-03-24
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多