2016-08-16 22 views
0

所以对于我的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”时,我对如何去做这件事感到困惑。

在此先感谢。

+0

你在哪里调用'了updateData()'?数据是否在ListView中?如果是这样,你可以使用[Adapter.getItemId()](https://developer.android.com/reference/android/widget/Adapter.html#getItemId(int))。 –

回答

2

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

+0

这正是['SQLiteDatabase.insert()'](https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#insert(java.lang.String,%20java.lang。 String,%20android.content.ContentValues)),所以OP可以只返回结果;'。 –

+0

谢谢,这正是我所做的,它让我的生活变得更轻松:^) – user287474

0

插入方法返回刚刚插入的行的id,如果在插入期间发生错误,则返回-1。

long id = db.insert(...) 

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

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

为了方便和灵活性,插入行后返回的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}); 
相关问题