更新查询不使用Android应用程序

时间:2015-08-30 18:25:24

标签: android sqlite

我正在编写一个需要在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查询,但我稍后也需要这样做。对于写入数据库的所有查询,我是否会遇到类似的问题?

2 个答案:

答案 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());
    }
}