データベースでINSERTまたはEXDIF IF EXISTタイプのプロシージャを実行する必要があります。私は.replace()
が行く方法だったことを読む。それは新しいレコードをうまく挿入しますが、レコードがすでに存在する場合、それを更新するようには見えません。このレコードがデータベースにないときに、私はこのコードを実行した場合、私がinsert()
をしたかのように、うまくレコードを作成するように見えるAndroidのSQLite - SQLiteDatabase.replace()は実際に何をしていますか?
ContentValues values = new ContentValues();
values.put(ID, 1);
values.put(NAME, "bob");
values.put(VISIBLE, true);
db.replace("peopleTable", null, values);
:
私はこのような何かを持っています。しかし、NAMEを「john」などに変更してreplace()
を再度実行すると、レコードが更新されないように見えます。
ドキュメントによると、ここでの構文は次のとおりです。
public long replace (String table, String nullColumnHack, ContentValues initialValues)
は、なぜそれがinitalValues
と呼ばれていますか?つまり、レコードが存在せず挿入される場合にのみ、これらの値が使用されますか?もしそうなら、メソッドを使ってレコードを更新する方法はありますか?新しい値はどこで指定しますか?
replace()
が何であるか誤解している場合、誰かがその目的を説明することができますか?
INSERT OR REPLACEを実行します。 –
'ContentValues'に特別なパラメータを渡すと、' ContentProvider.insert() 'メソッドで' INSERT'と 'REPLACE'プロシージャの両方を使うことができます。私はここにブログ記事を書いています:[SQLite INSERT OR REPLACE through ContentProvider | Buzzing Android](http://www.buzzingandroid.com/2013/01/sqlite-insert-or-replace-through-contentprovider/) – JesperB