如何在没有 entryId 的情况下更新 SQLiteOpenHelper 中的条目?
How to update entry in SQLiteOpenHelper without entryId?
因此,对于我的 android 应用程序,我想更新我最初通过下面的标准方法输入的一行数据,这些数据位于扩展 SQLiteOpenHelper 的 class 中:
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)});
}
在我的实际activity中,我有我想要更改的名称、数量和价格,但我不知道如何去做,我不知道"id" 的任意条目。
提前致谢。
而不是 return 布尔值,我会 return 新记录的 ID。假设您的应用程序与商店有关,您的名称、数量和价格是商品的属性 class,我也会为您的商品添加一个 ID 属性。在保存(创建)时,您可以在项目中设置 ID。这将允许您稍后使用相同的 ID 更新它。如果没有,您将需要一些其他属性作为主键,但这似乎不是您要找的东西,也不是一个很好的选择。
插入方法returns刚刚插入的行的id,如果在插入过程中出错,则为-1。
long id = db.insert(...)
或者更改了你的table的主键,例如:
db.execSQL("CREATE TABLE " + TABLE_NAME + "(name TEXT PRIMARY KEY not null,...
为了方便和灵活,插入行后返回 ID 总是更好。
您可以相应地修改代码以实现该目的。
但是,在当前情况下,如果您没有 ID 但仍想更新行,您可以使用其他列并创建条件组合。
如果您可以指定产品名称(如果它是唯一的),您可以在 update(..) 方法中用产品名称替换 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});
因此,对于我的 android 应用程序,我想更新我最初通过下面的标准方法输入的一行数据,这些数据位于扩展 SQLiteOpenHelper 的 class 中:
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)});
}
在我的实际activity中,我有我想要更改的名称、数量和价格,但我不知道如何去做,我不知道"id" 的任意条目。
提前致谢。
而不是 return 布尔值,我会 return 新记录的 ID。假设您的应用程序与商店有关,您的名称、数量和价格是商品的属性 class,我也会为您的商品添加一个 ID 属性。在保存(创建)时,您可以在项目中设置 ID。这将允许您稍后使用相同的 ID 更新它。如果没有,您将需要一些其他属性作为主键,但这似乎不是您要找的东西,也不是一个很好的选择。
插入方法returns刚刚插入的行的id,如果在插入过程中出错,则为-1。
long id = db.insert(...)
或者更改了你的table的主键,例如:
db.execSQL("CREATE TABLE " + TABLE_NAME + "(name TEXT PRIMARY KEY not null,...
为了方便和灵活,插入行后返回 ID 总是更好。 您可以相应地修改代码以实现该目的。
但是,在当前情况下,如果您没有 ID 但仍想更新行,您可以使用其他列并创建条件组合。
如果您可以指定产品名称(如果它是唯一的),您可以在 update(..) 方法中用产品名称替换 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});