Количество измененных строк (затронутых строк) всегда равно 1 для SQLite (Android)

У меня есть эта таблица SQLite в моем приложении Android:

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!

В других СУБД (например, Mysql), когда я выполняю обновление с теми же данными для конкретной записи, количество измененных строк равно 0. В SQLite на Android отличается?

1 ответ

Решение

Возможно, он просто не распознает, изменились ли эти данные. Любой запрос считается изменением, даже если данные совпадают.

Ну, вот как они это реализовали. Например, если вы пишете что-то в IntellIJ IDE и удаляете это, он не показывает файл как измененный, но если вы делаете это в Visual Studio, он делает, если вы не сделали CTRL+Z, Это просто другой способ реализации.

Другие вопросы по тегам