【问题标题】:Why cursorObject.moveToFirst() is required on updating my database table value为什么更新我的数据库表值时需要 cursorObject.moveToFirst()
【发布时间】:2015-08-02 05:36:49
【问题描述】:

我在更新特定行的列值时遇到了问题。我写过

Cursor c = mDb.rawQuery("UPDATE "+book+" SET footnotes='" + note + "' WHERE chapter="+chapter+" and verse="+verse+"", null);
c.close();

但是在添加 c.moveToFirst() 时它起作用了。这是为什么呢?

Cursor c = mDb.rawQuery("UPDATE "+book+" SET footnotes='" + note + "' WHERE chapter="+chapter+" and verse="+verse+"", null);
c.moveToFirst();
c.close();

为什么这里需要 c.moveToFirst(),有什么特别的原因吗?

对于 c.moveToFirst() 有一个解释 (What is The use of moveToFirst () in SQLite Cursors) 这简要表明使用 c.moveToFirst() 做了两件事

允许您测试查询是否返回空集

将光标移动到第一个结果

但是以上两点对更新有什么帮助呢?

【问题讨论】:

标签: android android-sqlite


【解决方案1】:

rawQuery() 视为C 库sqlite3_prepare_v2() 的包装器,它编译SQL 但不运行它,而将moveTo..() 视为sqlite3_step() 的包装器,这是实际执行准备好的语句所必需的.

相关:What is the correct way to do inserts/updates/deletes in Android SQLiteDatabase using a query string?

【讨论】:

  • 或多或少:moveTo..() 不是任何东西的包装器,它只是让 onMove() 被调用,由 SQLiteCursor 实现并做真正的事情
猜你喜欢
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
  • 1970-01-01
相关资源
最近更新 更多