我正在编写一个需要在SQLite数据库上执行UPDATE
查询的Android应用程序,但出于某种原因,查询在运行时没有任何效果。
这是应该执行查询的函数。
public void query()
{
try
{
cursor = this.db.rawQuery("UPDATE data SET saved=1 WHERE number=1", null);
}
catch(SQLiteException e)
{
System.out.println("Database Query Failed: " + e.getCause().getMessage());
}
}
虽然查询不起作用,但我没有从catch
子句获得任何输出,并且添加额外的catch
以检查Exception
也不会输出任何内容。
问题是什么?如何让UPDATE
查询起作用?我还没有尝试执行INSERT
查询,但我稍后也需要这样做。对于写入数据库的所有查询,我是否会遇到类似的问题?
答案 0 :(得分:2)
使用execSQL()
而非rawQuery()
来运行SQL。
rawQuery()
只编译SQL但不运行它。 execSQL()
编译并运行SQL。
答案 1 :(得分:1)
rawQuery()
是返回游标。 UPDATE
语句不返回游标。请改用execSQL()
:
public void query() {
try {
this.db.execSQL("UPDATE data SET saved=1 WHERE number=1", null);
} catch(SQLiteException e) {
System.out.println("Database Query Failed: " + e.getCause().getMessage());
}
}
使用参数替换更明智,而不是在查询字符串中包含您的参数,如下所示:
public void query( int savedState, int number ) {
try {
Object[] params = new Object[]{ new Integer(savedState), new Integer(number) };
this.db.execSQL("UPDATE data SET saved=? WHERE number=?", params );
} catch(SQLiteException e) {
System.out.println("Database Query Failed: " + e.getCause().getMessage());
}
}