0

Android アプリケーションに次の SQLite テーブルがあります。

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 では異なりますか?

4

1 に答える 1

1

そのデータが実際に変更されたかどうかを認識していないだけかもしれません。データが同じであっても、すべてのクエリが変更としてカウントされます。

まあ、それは彼らがそれを実装した方法です。たとえば、IntelIJ IDE で何かを書き込んで削除すると、ファイルが変更されたように表示されませんが、Visual Studio でそれを行うと、そうでない限り表示されますCTRL+Z。実装方法が違うだけです。

于 2016-06-19T21:34:52.947 に答える