Можно ли вызвать метод обновления SQLiteDatabase
в переопределенном методе insert()
поставщика контента?
Android Contentprovider - обновление в методе вставки
Ответ 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()
. Возможно, это лучше соответствует вашим потребностям.