我有一个这样的数据库:
"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;
}
但是这段代码改变了所有行......
答案 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;
}