数据库更新与原始查询不更新表?

时间:2014-01-10 09:24:53

标签: android android-sqlite

我一直在尝试使用以下查询更新我的表:

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()上方,表格就会更新。我尝试了很多搜索,但在文档或博客上都找不到任何东西。请帮我理解这背后的原因。提前谢谢。

1 个答案:

答案 0 :(得分:3)

如果不返回结果,则无需使用rawQuery。你必须做第二件事来正确关闭光标。

相反,您可以使用execSQL或更优雅的update方法。

如果你想理解为什么会这样想:

如果您有一个从数据库中读取的SQL查询,您可能希望延迟读取该数据,直到您确定要使用它为止。

因此,当您致电rawQuery时,您会获得对Cursor对象的引用。但还没有读到。这就是moveToFirst的作用。这是第一个告诉游标你认真对待运行这个SQL查询并且你想要一个结果的东西。

但是,由于您使用rawQuery进行更新,因此在尝试使用moveToFirst获取结果之前,不会将任何内容传递给数据库。

因此,您应该使用实际运行SQL查询的execSQL,而无需等待您请求结果。