2016-06-19 15 views
0

ich diesen SQLite Tisch in meinem Android-Anwendung haben:Die Anzahl der geänderten Zeilen (rows affected) ist immer 1 mit 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" + 
     ");"; 

Wenn ich einen Datensatz mit den gleichen Daten aktualisieren, die Anzahl der geänderten Zeilen (rows affected) ist immer 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! 

In anderen DBMS (wie Mysql), wenn ich ein Update mit den gleichen Daten auf einem bestimmten Datensatz, die Anzahl der geänderten Zeilen durchzuführen ist 0. In SQLite auf Android ist anders?

+0

Vielleicht erkennt es einfach nicht, ob diese Daten * tatsächlich * geändert worden sind. Jede Abfrage wird als Änderung gezählt, auch wenn die Daten identisch sind. – Vucko

+0

Ich denke auch, aber es ist seltsam. Andere DBMS (wie MySQL) geben Null zurück, wenn sich die Daten nicht ändern. – Alex

Antwort

1

Vielleicht erkennt es einfach nicht, wenn diese Daten tatsächlich geändert wurden. Jede Abfrage wird als Änderung gezählt, auch wenn die Daten identisch sind.

Nun, das ist genau so, wie sie es implementiert haben. Zum Beispiel, wenn Sie etwas in IntellIJ IDE schreiben und es löschen, zeigt es die Datei nicht als geändert, aber wenn Sie es in Visual Studio tun, tut es, es sei denn, Sie haben CTRL+Z. Es ist nur eine andere Art der Implementierung.

+0

, also würde ich gezwungen sein, die Abfrage wie folgt zu bearbeiten: '[0] Zeichenfolge where = COLUMN_NAME_SID +" = "+ sid +" UND "+ COLUMN_NAME_MSG +" <> "+ msg; [...] ' Ich habe keine andere Alternative? – Alex

+0

Hm, wahrscheinlich ja. Auf diese Weise können Sie die Änderungen verfolgen, wenn sie wirklich nur passieren :) Gute Idee – Vucko

Verwandte Themen