2016-08-16 23 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}); 
相關問題