android - 如何在 Android 中使用 sqlite 获取更新的行数?

标签 android sql sqlite

我正在android中使用sqlite数据库开发一个应用程序。 这是我的表 DDL 代码。

db.execSQL("CREATE TABLE 'ad_img' (" +
"'ad_img_uid'  INTEGER PRIMARY KEY AUTOINCREASE NOT NULL," +
"'ad_uid'  INTEGER," +
"'ad_img_url'  TEXT(255) NOT NULL," +
"'ad_img_local'  TEXT(255) NOT NULL" +
")");

这是我的更新sql代码。

public int updateLocalPathTOAdImg(int ad_uid, String ad_img_url, String ad_img_local) {
        int result = 0;

        try {
            String sql = "UPDATE 'ad_img' SET " +
                    "'ad_img_local' = '" + ad_img_local + "' " +
                    "WHERE 'ad_uid' = " + ad_uid + " AND 'ad_img_url' = '" + ad_img_url + "'";
            m_db.execSQL(sql);

            return result;  ///////updated row count??
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return result;
    }

当然,我可以使用update()和changes()函数。 但我想使用 execSQL() 函数。

我可以使用 execSQL() 函数获取更新的行数吗?

最佳答案

SQLite C API ,程序执行UPDATE语句后,可以通过调用sqlite3_changes()来确定更改的行数。 .

在 Android 框架中,唯一调用 sqlite3_changes() 的地方是 update() 方法。

如果您需要执行的更新对于 update() 来说过于复杂,则必须执行第二个查询来调用内置 changes() function :

db.execSQL("UPDATE ...");
long changes = DatebaseUtils.longForQuery(db, "SELECT changes()", null);

或者,您可以启用已弃用的 PRAGMA count_changes (希望它可用)从 UPDATE 语句本身返回数字,就好像它是一个查询一样:

class MyOpenHelper {
    ...
    void onConfigure(SQLiteDatabase db) {
        db.execSQL("PRAGMA count_changes = ON");
    }
}

...

changes = DatebaseUtils.longForQuery(db, "UPDATE ...", null);

关于android - 如何在 Android 中使用 sqlite 获取更新的行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41209452/

相关文章:

android - StackMob 或 Server (MySql) 来处理用户帐户

android - thread/runnable, handler, runonuithread, asynctask 之间的区别

MySQL - 基于不同列 A 值的平均列 B 值

sqlite - 在不依赖 glib 的情况下使用来自 vala 的 sqlite

objective-c - FM数据库 : is it safe to leave failing inserts (unique PK key violated)?

android - 是否存在 Android AsyncTaskQueue 或类似的东西?

android - Flutter 插件 list 占位符错误

mysql - SQL:跨多个表查找产品价格的平均涨幅?

sql - 手工全外连接

sql - 数据库切换时出现错误 'Grid index out of range'