2014-04-05 58 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中刪除了一行,那麼如何更新該行缺失? 最好刪除數據並重寫或不重寫? –