【发布时间】:2013-06-06 06:30:36
【问题描述】:
我正在尝试使用rawQuery 和execSQL 方法来操作我的数据库,而不是.update、.insert 等。我正在尝试使用以下代码执行更新:
db.execSQL("UPDATE configuration " +
"SET number_fields = " + number_fields + ", "
+ "frequency = " + frequency + ", "
+ "ag = " + ag + ", "
+ "number_alarms = " + number_alarms + ", "
+ "failed_rapper = " + failed_rapper + ", "
+ "max_mv = " + max_mv + ", "
+ "max_nav = " + max_nav + " "
+ "WHERE serial_id = " + Integer.toString(id) + ";");
在此操作之后,有一个日志表明发生了更新并且它似乎可以工作,但是当我尝试在表上执行 select 语句时,它返回并显示以下错误:
06-10 10:01:47.564: W/System.err(3815): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
现在,我在 Android 中使用 SQLite 数据库浏览器手动插入的不同数据上执行了相同的 SELECT,它工作正常。我还在 SQLite 浏览器中执行了相同的 UPADTE,它在那里工作。因此,我知道问题在于 UPDATE 命令在 Android 上运行时不起作用。
问题:为什么 UPDATE 命令在 execSQL() 方法中不起作用?
【问题讨论】:
-
乍一看,您的 UPDATE 语句看起来是正确的。您是否仔细检查过所有列名的拼写是否正确(这经常让我感到困惑)?此外,您确定所有变量都已初始化并包含将要插入到表中的列的有效值吗? (使用调试器单步执行可以帮助验证这一点)。如果这两件事都是正确的,也许您可以发布您的 SELECT 代码,因为那是实际错误发生的地方。
-
@MattDavis 似乎没有使用正确的值初始化表,然后在更新新值时不提交。感谢您的帮助。
-
我明白了!很高兴你明白了。正确初始化表后,execSQL 方法是否最终会为更新工作?
-
@MattDavis 是的,它正在工作。谢谢。
标签: android sqlite sql-update android-sqlite