【发布时间】:2015-04-25 19:00:16
【问题描述】:
内容提供者的insert()重写方法中调用SQLiteDatabase更新方法可以吗?
【问题讨论】:
标签: android android-contentprovider
内容提供者的insert()重写方法中调用SQLiteDatabase更新方法可以吗?
【问题讨论】:
标签: android android-contentprovider
基本上没问题,但是由于您没有提供代码,我只能发布两种可能的方法
第一:
// 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/主键。
【讨论】:
您可以选择在覆盖的方法中写入什么内容。 所以是的,没关系。
我不知道您要做什么,但您可能也想看看SQLiteDatabase 的replace() 方法。也许它更适合您的需求。
【讨论】: