【问题标题】:UPDATE Query not Working with Android App更新查询不适用于 Android 应用程序
【发布时间】:2015-08-31 05:02:23
【问题描述】:

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

【问题讨论】:

  • SQLiteDatabase 具有插入、更新、删除等方法。我建议您探索该类的 javadoc。

标签: android sqlite


【解决方案1】:

使用execSQL() 而不是rawQuery() 来运行SQL。

rawQuery() 只编译 SQL 但不运行它。 execSQL() 编译和运行 SQL。

【讨论】:

  • 谢谢!我可以将execSQL() 也用于SELECT 查询吗,还是我还需要使用rawQuery() 进行查询?
  • "rawQuery() 只编译 SQL,但不运行它。" ——你能提供一个参考吗?官方文档说它运行查询。但是,当您提交不返回游标的查询时会发生什么,并没有记录。
  • @DavidB 对于SELECTs,请使用rawQuery()。当您移动返回的Cursor 时,SQL 程序将运行到下一个结果行。
  • @laalto 好的。只是想看看我是否可以只使用一个或另一个。
  • @323go 基本上是 sqlite C API 设计 - stackoverflow.com/questions/20110274/…
【解决方案2】:

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

【讨论】:

  • 如何进行参数替换?
  • 查看包含的样本。感谢您的编辑——我复制/粘贴了 ;)
  • 谢谢!只是出于好奇,建议使用此方法是因为它会清理输入还是约定俗成的问题?
  • 在您的具体情况下,这不是必需的,但是一旦您的一个或两个参数变为参数化,就可以了。它有助于查询的可读性,并且在字符串参数的情况下,它可以防止 SQL 注入。
  • 好的,我想知道这是否与输入的卫生有关。
猜你喜欢
  • 1970-01-01
  • 2012-09-04
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多