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

时间:2016-06-19 21:11:08

标签: android sqlite rows-affected

我的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中是不同的?

1 个答案:

答案 0 :(得分:1)

可能它只是无法识别该数据是否实际已被更改。即使数据相同,任何查询都会被视为更改。

那就是他们实施它的方式。例如,如果您在IntellIJ IDE中编写并删除它,则它不会将文件显示为已更改,但如果您在Visual Studio中执行此操作,则会执行此操作,除非您执行了CTRL+Z。这只是一种不同的实施方式。