Android Contentprovider - обновление в методе вставки - PullRequest
11 голосов
/ 26 ноября 2010

Можно ли вызвать метод обновления SQLiteDatabase в переопределенном методе insert() поставщика контента?

Ответы [ 2 ]

26 голосов
/ 26 ноября 2010

В принципе это нормально, но так как вы не предоставили код, я просто могу опубликовать 2 возможных способа для него

Первый:

// In your content provider
public Uri insert(...) {
    long insertId = db.insert(...);

    if(insertId == -1) {
        // insert failed, do update
        db.update(...);
    }
}

Второй:

public Uri insert(...) {
    long insertId = db.insertWithOnConflict(table, null, values, SQLiteDatabase.CONFLICT_REPLACE)

    if(insertId == -1) {
        // insert and update/replace failed
    }
}

Проверьте SQLiteDatabase для ссылки на четвертый параметр.В большинстве случаев последний метод должен быть достаточным, если только вы не хотите обновлять только определенные поля, если строка существует, и иметь все поля, если ее нет.

Наиболее полезной потребностью в insertWithOnConflict может быть то, что вы можете вставитьстрока и, если она уже существует, проигнорируйте вставку и вместо этого верните Uri / первичный ключ уже существующей строки.

5 голосов
/ 26 ноября 2010

Это ваш выбор того, что вы пишете в своих переопределенных методах.Так что да, все в порядке.

Я не знаю, что вы пытаетесь сделать, но вы, возможно, захотите взглянуть и на метод SQLiteDatabase replace().Может быть, это лучше соответствует вашим потребностям.

...