使用 SQLite (Android) 更改的行数(受影响的行数)始终为 1

The number of changed rows (rows affected) is always 1 with SQLite (Android)

我的 Android 应用程序中有这个 SQLite table:

CREATE TABLE " + TABLE_NAME + " (" +
        _ID + " INTEGER PRIMARY KEY AUTOINCREMENT" +
        COMMA + COLUMN_NAME_SID + " INTEGER" +
        COMMA + COLUMN_NAME_TITLE + " TEXT NOT NULL" +
        COMMA + COLUMN_NAME_IS_MINE + " BOOLEAN NOT NULL" +
        COMMA + COLUMN_NAME_CREATED_AT + " DATETIME" +
        COMMA + COLUMN_NAME_CODE + " TEXT UNIQUE" +
        COMMA + COLUMN_NAME_MSG + " INTEGER NOT NULL DEFAULT 0" +
        " );";

当我用相同的数据更新记录时,更改的行数(受影响的行数)始终为 1。

SQLiteDatabase db = m_helper.getWritableDatabase();
String where = COLUMN_NAME_SID + "=" + sid;
ContentValues values = new ContentValues();
values.put(COLUMN_NAME_MSG, msg);
int rowsAffected = db.update(TABLE_NAME, values, where, null);
db.close();
// rowsAffected is always 1!

在其他 DBMS(如 Mysql)中,当我对特定记录执行相同数据的更新时,更改的行数为 0。在 Android 上的 SQLite 中不同吗?

也许它只是无法识别该数据是否真的被更改过。任何查询都算作一次更改,即使数据相同。

好吧,这就是他们实施它的方式。例如,如果你在 IntellIJ IDE 中写了一些东西并删除了它,它不会显示文件已更改,但如果你在 Visual Studio 中这样做,它会显示,除非你做了 CTRL+Z.只是实现方式不同而已。