在内容提供程序的insert()
覆盖方法中调用SQLiteDatabase
的更新方法是否可以?
在内容提供程序的insert()
覆盖方法中调用SQLiteDatabase
的更新方法是否可以?
基本上没问题,但由于你没有提供代码,我只能给出两种可能的解决方法
第一种:
// 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()
方法。也许它更适合你的需求。