簡體   English   中英

Android - 檢查表中是否存在行並更新它

[英]Android - Check if row exists in table and update it

不幸的是,我能找到的所有解決方案都無法幫助我解決問題。

通過單擊按鈕,我想向我的數據庫表添加一些值,但首先它應該檢查該行是否已經存在於我的表中,如果存在,它應該更新該行。

這是我的代碼:

主要活動:(只需單擊按鈕)

ingredient= new Ingredient();

btnAdd.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        for(int i = 0; i < dataSource.size();i++){
            tvname = (TextView) shoppingList.getChildAt(i).findViewById(R.id.tvName);
            tvamount = (TextView) shoppingList.getChildAt(i).findViewById(R.id.tvAmount);

            String nameTV = tvname.getText().toString();
            String amountTV = tvamount.getText().toString();

            ingredient.setName(nameTV);
            ingredient.setAmount(amountTV);
            ingredient.setId(i);

            TableIngredient.getInstance(IngredientShopping.this).checkRow(ingredient);
            }

數據庫表:

public class TableIncredient extends SQLiteOpenHelper {
    public static TableIngredient INSTANCE = null;

    public static final String DB_NAME = "INGREDIENT_TABLE";
    public static final int VERSION = 1;
    public static final String TABLE_NAME = "ingredient_table";

    public static final String KEY_ID = "ID";
    public static final String COL_NAME = "Name";
    public static final String COL_AMOUNT = "AMOUNT";


    public TableIngredient (Context context) {
        super(context, DB_NAME, null, VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
    String createQuery = "CREATE TABLE " + TABLE_NAME
            + "(" + KEY_ID + " INTEGER PRIMARY KEY, "
            + COL_NAME + " TEXT NOT NULL, "
            + COL_AMOUNT + " INTEGER DEFAULT NULL)";
    db.execSQL(createQuery);
    }

    public boolean checkRow(Ingredient ingredient){
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor c = db.query(TABLE_NAME,
            new String[]{KEY_ID, COL_NAME, COL_AMOUUNT},
            KEY_ID + " =? AND " + COL_NAME + " =? AND " + COL_AMOUNT + " =?" ,
            new String[]{String.valueOf(ingredient)},
            null, null, null, null);

        ContentValues values = new ContentValues();
        values.put(COL_NAME, ingredient.getName());
        values.put(COL_AMOUNT, ingredient.getAmount());

        if (c.moveToFirst()){
            increseIngredient(ingredient);
            return true;
        }
        else {
            long newID = db.insert(TABLE_NAME, null, values);
            db.close();
            getIngredient(newID);
            return false;
        }
    }
}

使用這段代碼,它總是使用 else 語句,我不知道為什么會發生這種情況。

我希望有人可以幫助我創建一個不存在的新行,如果存在則更新該行。

使用這段代碼,它總是使用 else 語句,我不知道為什么會發生這種情況。

發生這種情況的原因是查詢方法的第 4 個參數是new String[]{String.valueOf(ingredient)}

這將解析為類似於Ingredient@1091的值,您是否有一個具有類似 ID 的成分行(修辭,因為 ID 列是 rowid 的別名,因此只能是整數值存儲)。

Ingredient@1091的原因是 Ingredient 對象的 String 值將是一個指向該對象的指針。

因此,不會返回任何行。

如果您改為使用new String[]{String.valueOf(ingredient.getId),ingredient.getName,ingredient.getAmount)}

這 3 個值將(應該)是正確的值(假設 ID 正確存儲在成分中)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM