2014-04-05 57 views
0

删除行我有一个这样的数据库:更新和数据库

"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" 

我要更新一些值未在表中,示例只在“Ricetta2”的量。 最好是删除所有行并用新数据重新创建新行或更新仅更改的值? 我这么认为是因为如果用户在重新创建配方“Ricetta2”时删除了一种配料,我只有两种配料。 是正确的还是有更新/删除表的最佳方法?

我用这个代码更新:

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

如果要更新,要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子句是好的,它应该工作。

+0

行,数据来自ListView,所以如果用户在ListView中删除了一行,那么如何更新缺少的行呢? 最好删除数据并重写或不重写? –

+0

您无法更新缺少的行。如果用户删除(在ListView上)某个项目,删除该行(语法与更新相同)。那么你应该从ListView中删除该项目以及防止用户“更新”的项目不存在的情况下 – markubik

0

对于连续更新的特定数据,你必须使用“其中”条件, 例子:

在主类

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); 

(它会更新该行的recipie_id列其中id = 4)

在你的数据库类中添加这个方法

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; 
} 
+0

ok,数据来自ListView,所以如果用户在ListView中删除了一行,那么如何更新该行缺失? 最好删除数据并重写或不重写? –