我一直在尝试使用以下查询更新我的表:
String updateQuery = "UPDATE TABLE SET COLUMN = 'HELLO' || COLUMN;"
dataBase.rawQuery(updateQuery,null);
该表未使用查询更新 COLUMN 字段中的值。
但是,当我运行以下命令时,表会更新:
String updateQuery = "UPDATE TABLE SET COLUMN = 'HELLO' || COLUMN;"
Cursor updateCursor = dataBase.rawQuery(updateQuery,null);
updateCursor.moveToFirst();
updateCursor.close();
当我在不使用updateCursor.moveToFirst()
的情况下运行命令时,表格没有自行更新,但只要我将其添加到updateCursor.close()
上方,表格就会更新。我尝试了很多搜索,但在文档或博客上都找不到任何东西。请帮我理解这背后的原因。提前谢谢。
答案 0 :(得分:3)
如果不返回结果,则无需使用rawQuery
。你必须做第二件事来正确关闭光标。
如果你想理解为什么会这样想:
如果您有一个从数据库中读取的SQL查询,您可能希望延迟读取该数据,直到您确定要使用它为止。
因此,当您致电rawQuery
时,您会获得对Cursor
对象的引用。但还没有读到。这就是moveToFirst
的作用。这是第一个告诉游标你认真对待运行这个SQL查询并且你想要一个结果的东西。
但是,由于您使用rawQuery
进行更新,因此在尝试使用moveToFirst
获取结果之前,不会将任何内容传递给数据库。
因此,您应该使用实际运行SQL查询的execSQL
,而无需等待您请求结果。