UPDATE查询游标-无法从CursorWindow

时间:2019-06-10 12:21:34

标签: java android sqlite android-sqlite

我想在选中CheckBox时更新表中的列。

我尝试过

Log.d("print", "  " + res.getString(res.getColumnIndex("name")));

但是给我这个错误 无法从CursorWindow读取行0,col -1。在从游标访问数据之前,请确保游标已正确初始化。

RecyclerViewAdapter:

checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Log.d ("print", "item clicked");
                if (checkBox.isChecked()){
                    databaseHandler.updateHabit(name.getText().toString(), false);
                }else{
                    DatabaseHandler databaseHandler = new DatabaseHandler(ctx);
                    databaseHandler.updateHabit(name.getText().toString(), true);
                }
            }
        });

DatabaseHandler:


SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();
values.put(Constants.Habit.HABIT_COL_DONE, done);

Cursor res = db.rawQuery("SELECT DESCRIPTION from HABIT_DESCRIPTION WHERE NAME = '" + s + "'", null);

res.moveToFirst();
Log.d("print", "  " + res.getString(res.getColumnIndex("name")));

我知道它没有更新,因为当我打印整个表格时,它是旧值。

1 个答案:

答案 0 :(得分:1)

  

我想在选中CheckBox时更新表中的列

然后,您需要使用一种在表上执行SQL UPDATE查询的方法。您已经有ContentValues,可以将其传递给update()

  

但是给我这个错误无法从CursorWindow读取行0,col -1。在从游标访问数据之前,请确保游标已正确初始化。

您的选择只有DESCRIPTION列,但是您正在尝试阅读name列。 getColumnIndex()对于光标中不存在的列返回-1。

您还应该检查moveToFirst()的返回值-如果移动成功并且光标指向有效行,它将返回true。