更新和删除数据库中的行

时间:2014-04-05 10:56:37

标签: android sqlite

我有一个这样的数据库:

"id", "ingredients_id", "recipes_id", "qta", "created_at"
"1", "Acqua",         "Ricetta1", "100", "2014-04-05 10:34:13"
"2", "Alcolico Gin",  "Ricetta1", "200", "2014-04-05 10:34:13"
"3", "Amido di Mais", "Ricetta1", "300", "2014-04-05 10:34:13"
"4", "Acqua",         "Ricetta2", "330", "2014-04-05 10:34:15"
"5", "Alcolico Gin",  "Ricetta2", "440", "2014-04-05 10:34:15"
"6", "Amido di Mais", "Ricetta2", "550", "2014-04-05 10:34:15"

我必须更新表中的一些值,例如,#34; Ricetta2"上的数量。 最好删除所有行并使用新数据重新创建新行,还是仅更新已更改的值? 我是这么认为的,因为如果用户在重新创建配方时删除了一种成分,那么#34; Ricetta2"我只有2种成分。 是正确的还是有更新/删除表的最佳方法?

我使用此代码进行更新:

public long Updatedb_Ingredienti_for_db_Recipe(StructRicetta rct) {

    ContentValues values = new ContentValues();
    long Ingredienti_id = -1;
    int num = rct.get_num_Ingredienti();
    for (int i = 0; i< num;i++) {
        values.put(KEY_RECIPES_ID, rct.get_db_Ricetta_Name());  
        values.put(KEY_INGREDIENTS_ID, rct.itemsIngredients.get(i).getNome());
        values.put(KEY_QTA, rct.itemsIngredients.get(i).getQta());
        values.put(KEY_CREATED_AT, getDateTime());

        // updating row
        Ingredienti_id = dbWrite.update(TABLE_INGREDIENTS_RECIPES, values, KEY_RECIPES_ID + " = ", new String[] { String.valueOf(rct.get_db_Ricetta_Name()) });

        if(Ingredienti_id < 0)
            break;// errore scrittura
    }
    return Ingredienti_id;
}

但是这段代码改变了所有行......

2 个答案:

答案 0 :(得分:0)

如果要更新,则应仅向ContentValues传递要更新的列。所以,如果你只是想更新数量(我猜它是一个“qta”列),你应该只做这个:

 values.put(KEY_QTA, rct.itemsIngredients.get(i).getQta());

dbWrite.update()方法的工作是知道如何在更新时处理ContentValues。所以:

 for (int i = 0; i< num;i++) {
        values.put(KEY_QTA, rct.itemsIngredients.get(i).getQta());
        // updating row
        Ingredienti_id = dbWrite.update(TABLE_INGREDIENTS_RECIPES, values, KEY_RECIPES_ID + " = ", new String[] { String.valueOf(rct.get_db_Ricetta_Name()) });
 }

如果你的where子句没问题,它应该可行。

答案 1 :(得分:0)

要更新连续的特定数据,您必须使用&#39;其中&#39;条件, 例如:

在您的主课程中

DBClass db = new DBClass(this);
ContentValues cv = new ContentValues();
cv.put(DBHelper.COL_RECIPIES_ID, "Ricetta123");
String where = DBHelper.COL_ID + " = " + 4;
db.update_data(cv,DBClass.TableName,where);

(它将更新id = 4的那行的recipie_id列)

在您的数据库类中添加此方法

public int update_data(ContentValues cv, String TableName, String where) {
    // TODO Auto-generated method stub
    db = this.getWritableDatabase();
    int rowid = (int) db.update(TableName, cv, where, null);
    return rowid;
}