2016-06-19 7 views
0

のSQLite(アンドロイド)との1: 数は常に私は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" + 
     ");"; 

私は同じデータを持つレコードの数を更新し

私は特定のレコードに同じデータで更新を実行するときに、変更された行の数が、SQLiteの上では0である、常に(Mysqlのような)他のDBMSにおいて

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! 

ある(行が影響を受けた)行を変更Androidは違いますか?

+0

データが実際に変更されたかどうかはわかりません。データが同じ場合でも、クエリは変更としてカウントされます。 – Vucko

+0

私もそうだと思いますが、それは変です。その他DBMS(MySQLなど)は、データが変更されない場合はゼロを返します。 – Alex

答えて

1

データが実際に変更されたかどうかはわかりません。データが同じ場合でも、クエリは変更としてカウントされます。

これは、実装した方法と同じです。たとえば、IntellIJ IDEに何かを書き込んで削除した場合、変更されたファイルは表示されませんが、Visual Studioで行う場合は、CTRL+Zを実行していなければ行います。それは単に実装の方法の違いです。

+0

だから私は次のようにクエリを編集しなければならないでしょう: '[...] 文字列where = COLUMN_NAME_SID +" = "+ sid +" AND "+ COLUMN_NAME_MSG +" <> "+ msg; [...] ' 私には他の選択肢がありませんか? – Alex

+0

ええと、おそらくはい。あなたが本当に起こった場合、この方法で変更を追跡することができます:)良いアイデア – Vucko