Android Contentprovider - обновление в методе вставки

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

Ответ 1

В принципе, это хорошо, но поскольку вы не предоставили код, я просто могу отправить ему 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/primary ключ уже существующей строки.

Ответ 2

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

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