如何在没有entryId的情况下更新SQLiteOpenHelper中的条目?
所以对于我的Android应用程序,我想更新数据行,我最初是通过标准方法进入下面是扩展SQLiteOpenHelper类中:如何在没有entryId的情况下更新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”时,我对如何去做这件事感到困惑。
在此先感谢。
而不是返回一个布尔值,我会返回新记录的ID。比方说,例如你的应用与商店有关,你的名字,数量和价格是Item类的属性,我也会为你的商品添加一个ID属性。在你的保存(创建)你在你的项目中设置ID。这将允许您稍后使用相同的ID进行更新。如果没有,你需要一些其他属性作为主键,但这看起来不像你正在寻找的东西,也不是一个好的选择。
这正是['SQLiteDatabase.insert()'](https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#insert(java.lang.String,%20java.lang。 String,%20android.content.ContentValues)),所以OP可以只返回结果;'。 –
谢谢,这正是我所做的,它让我的生活变得更轻松:^) – user287474
插入方法返回刚刚插入的行的id,如果在插入期间发生错误,则返回-1。
long id = db.insert(...)
或更改了表的主键,例如:
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});
你在哪里调用'了updateData()'?数据是否在ListView中?如果是这样,你可以使用[Adapter.getItemId()](https://developer.android.com/reference/android/widget/Adapter.html#getItemId(int))。 –