我的应用可让用户修改影响多行的信息。用户可以修改其中的几个,但我只想在用户选择保存时将更改应用于数据库(他可以放弃更改) 我遇到了一些问题。
现在我正在尝试使用values.put然后在save onClickListener中调用db.insert,但是如果用户更改了多行,这只会反映用户所做的最后一次更改,对吧? (一行由name,date,spinnerGeneral,spinnerSprint,timeSprint,spinnerRest,timeRest组成)我该如何处理?一个值数组,然后为每个值调用insert?
这是我现在的代码
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 exercise WHERE Row_ID = rowID [1 ...]吗? Row_ID是自动生成的列的名称吗?
非常感谢
答案 0 :(得分: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();
}
顺便说一下,我总是在访问数据库时尝试使用ORM。有更多的开销,但它使代码更清晰,更不容易出错。