Я думаю, COL_NUM
это название столбца, верно?Так что эта строка неверна:
cv.put("COL_NUM", COL_NUM + 1);
, потому что вы думаете, что добавляете число к значению столбца, где в действительности вы объединяете 1
с именем столбца.То, что вы должны сделать, это увеличить текущее значение на 1 следующим образом:
db.execSQL(
"update " + TaskContract.TaskEntry.TABLE +
" set " + COL_TaskContract.TaskEntry.COL_NUM + " = " + COL_TaskContract.TaskEntry.COL_NUM + " + 1" +
" where " + TaskContract.TaskEntry.COL_TASK_TITLE + " = ?", new Object[] {task});
Если есть случай, когда COL_NUM
равен null
, измените выражение на следующее:
db.execSQL(
"update " + TaskContract.TaskEntry.TABLE +
" set " + COL_TaskContract.TaskEntry.COL_NUM + " = coalesce(" + COL_TaskContract.TaskEntry.COL_NUM + ", 0) + 1" +
" where " + TaskContract.TaskEntry.COL_TASK_TITLE + " = ?", new Object[] {task});
Итак, измените ваш метод следующим образом:
public void incrment(View view) {
View parent = (View) view.getParent();
TextView taskTextView = (TextView) parent.findViewById(R.id.task_title);
String task = taskTextView.getText().toString();
SQLiteDatabase db = mHelper.getWritableDatabase();
db.execSQL(
"update " + TaskContract.TaskEntry.TABLE +
" set " + COL_TaskContract.TaskEntry.COL_NUM + " = coalesce(" + COL_TaskContract.TaskEntry.COL_NUM + ", 0) + 1" +
" where " + TaskContract.TaskEntry.COL_TASK_TITLE + " = ?", new Object[] {task}
);
db.close();
updateUI();
}
Конечно, вы можете использовать метод update()
, как и вы, но сначала вы должны найти существующее значение в COL_NUM
, увеличить его, поставить егов cv
и затем выполните update()
.