65

ドキュメントに見られるように、挿入または更新を行う構文は : ですINSERT OR REPLACE INTO <table> (<columns>) VALUES (<values>)。私の質問は、次をマージする関数はありますか?

public long insert (String table, String nullColumnHack, ContentValues values) 
public int update (String table, ContentValues values, String whereClause, String[] whereArgs)

または、準備された SQL ステートメントと rawQuery を使用して実行する必要がありますか?

Android で挿入または更新を行うためのベスト プラクティスは何ですか?

4

9 に答える 9

44

これはあなたのメソッドSQLiteDatabase.insertWithOnConflict()です。それが何をするかを理解するには、sqlite に関するこのドキュメントを参照してください。

于 2012-11-12T10:36:14.063 に答える
10

SQLiteDatabase.replace()はこれを行い、基本的に次を呼び出します。

insertWithOnConflict(table, nullColumnHack, initialValues, CONFLICT_REPLACE);

残念ながら、ドキュメントはあまり明確ではありません。

于 2014-11-16T11:25:48.530 に答える
3

SQLiteDatabase.replace()はおそらくあなたが探しているものです。試したことはありませんが、新しく挿入された行の行 ID を返すとドキュメントに記載されているため、機能する可能性があります。

于 2012-11-09T16:32:43.660 に答える
2

私は同じ問題を抱えていましたが、オブジェクトが既に ID を持っている場合は更新する必要があり、ID を持っていない場合は挿入する必要があることに気付きました。

1-オブジェクトgetIdでIntegerを使用するか、適切と思われる方法でIdを初期化します。これが私のコードです

public Integer getId() {
    return id;
}

2- すべてを ContentValues に入れた後、挿入または更新のためにメソッドの Id を確認します。

if(myObject.getId()!= null ){
        int count = db.update(TABLE_NAME,myContentValues,ID + " = ? ",
                new String[]{String.valueOf(myObject.getId())});
        if(count<=0){
            //inserting content values to db
            db.insert(TABLE_NAME, null, myContentValues);
        }
    } else {
        db.insert(TABLE_NAME, null, myContentValues);
    }

ここで何が起こるかというと、ID が存在する場合はその行を更新しますが、更新メソッドが -1 を返す場合は、その ID を持つ行がないことを意味するので、行を挿入し、ID がない場合は挿入します。

お役に立てれば。

于 2016-07-18T20:08:17.600 に答える