有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在没有entryId的情况下更新SQLiteOpenHelper中的条目?

因此,对于我的安卓应用程序,我想更新我最初通过以下标准方法输入的一行数据,这些数据位于扩展SQLiteOpenHelper的类中:

public boolean insert(String name, int quantity, double price){
    ContentValues contentValues = new ContentValues();
    contentValues.put(DatabaseContract.Table.COLUMN_NAME_NAME, name);
    contentValues.put(DatabaseContract.Table.COLUMN_NAME_QUANTITY, quantity);
    contentValues.put(DatabaseContract.Table.COLUMN_NAME_PRICE, price);
    long result = db.insert(DatabaseContract.Table.TABLE_NAME, null, contentValues);
    if (result == -1)
        return false;
    else
        return true;
}

public void updateData(int id, String name, int quantity, double price){
        ContentValues contentValues = new ContentValues();
        contentValues.put(DatabaseContract.Table.COLUMN_NAME_ID, id);
        contentValues.put(DatabaseContract.Table.COLUMN_NAME_NAME, name);
        contentValues.put(DatabaseContract.Table.COLUMN_NAME_QUANTITY, quantity);
        contentValues.put(DatabaseContract.Table.COLUMN_NAME_PRICE, price);
        db.update(DatabaseContract.Table.TABLE_NAME, contentValues, "ID = ?", new String[]{Integer.toString(id)});
    } 

在我的实际活动中,我有我想要更改的名称、数量和价格,但当我不知道任意条目的“id”时,我不知道如何进行更改

提前谢谢


共 (3) 个答案

  1. # 1 楼答案

    我将返回新记录的ID,而不是返回布尔值。比如说,你的应用程序与商店有关,你的名字、数量和价格是Item类的属性,我也会给你的商品添加一个ID属性。在保存(创建)时,在项目中设置ID。这将允许您稍后使用相同的ID进行更新。如果不是,你需要一些其他属性作为主键,但这似乎不是你想要的,也不是一个很好的选择

  2. # 2 楼答案

    为了方便和灵活,插入一行后返回ID总是更好。 您可以相应地修改代码以实现这一点

    但是,与当前场景一样,如果您没有ID,但仍想更新行,则可以使用其他列并创建条件组合

    如果可以指定产品名称(如果是唯一的),则可以在更新(..)中用产品名称替换ID方法

    db.update(DatabaseContract.Table.TABLE_NAME, contentValues, DatabaseContract.Table.COLUMN_NAME_NAME + " = ?", new String[]{name});
    

    或者,如果您想使用以下条件的组合:

    db.update(DatabaseContract.Table.TABLE_NAME, contentValues, DatabaseContract.Table.COLUMN_NAME_NAME + " = ? AND "+DatabaseContract.Table.COLUMN_NAME_PRICE + " = ?", new String[]{name,price});
    
  3. # 3 楼答案

    insert方法返回刚插入的行的id,如果插入过程中出现错误,则返回-1

    long id = db.insert(...)
    

    或者更改了表的主键,例如:

    db.execSQL("CREATE TABLE " + TABLE_NAME + "(name TEXT PRIMARY KEY not null,...