2016-08-23 48 views
0

我的應用程序允許用戶修改影響多行的信息。用戶可以修改其中幾個,但我只是想要將更改應用到數據庫,如果用戶選擇保存(他可以放棄更改) 我有這個問題。Android:只在用戶保存後纔在數據庫中插入Sqlite

現在我試圖使用values.put,然後在save onClickListener中調用db.insert,但是如果用戶更改了多行,這隻會反映用戶最後一次更改,對吧? (一行由name,date,spinnerGeneral,spinnerSprint,timeSprint,spinnerRest,timeRest)我該如何處理這個?值的數組,然後調用每個人的插入?

這是我的代碼現在

values.put("name", workoutName); 
values.put("date",datewo); 
values.put("spinnerGeneral", data.get(1).getSpinnerGeneral()); 
values.put("spinnerSprint", data.get(1).getSpinnerSprint()); 
values.put("timeSprint", data.get(1).getTimeSprint()); 
values.put("spinnerRest", data.get(1).getSpinnerRest()); 
values.put("timeRest", data.get(1).getTimeRest()); 


[....] 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    saveData=true; 
    int id = item.getItemId(); 

if (id == R.id.action_save){ 
    long rowId = db.insert("workout",null,values); 
    onBackPressed(); 
} 

我也想過打電話只是db.insert()當用戶第一次修改了一行,並保存ROW_ID到一個數組ROWID [],如果用戶決定放棄更改,只需刪除所有具有我擁有的row_ID的行。這可能嗎?它只是使用DELETE * FROM鍛鍊WHERE Row_ID = rowID [1 ...]? Row_ID是它自動生成的列的名稱?

非常感謝您

回答

1

對於初學者來說,我會後現實生活中的對象我的數據庫模式,而不是UI組件,使微調名出DB列名的,除非你的自行車紡紗過程來講鍛鍊。

我建議不要添加數據,如果用戶決定放棄數據,然後再次刪除它。它增加不必要的複雜性

工作過你提供的一些代碼,我認爲解決辦法是這樣的:

private void collectUIValues() { 
    values.clear(); 
    values.put("name", workoutName); 
    values.put("date",datewo); 
    values.put("spinnerGeneral", data.get(1).getSpinnerGeneral()); 
    values.put("spinnerSprint", data.get(1).getSpinnerSprint()); 
    values.put("timeSprint", data.get(1).getTimeSprint()); 
    values.put("spinnerRest", data.get(1).getSpinnerRest()); 
    values.put("timeRest", data.get(1).getTimeRest()); 
} 

if (id == R.id.action_save){ 
    collectUIValues();   
    long rowId = db.insert("workout",null,values); 

    onBackPressed(); 
} 

BTW,我總是試圖訪問數據庫時使用的ORM。有一點額外的開銷,但它使代碼更清潔,更不容易出錯。

相關問題