Android Contentprovider - 在插入方法中更新

时间:2010-11-26 12:26:10

标签: android android-contentprovider

是否可以在内容提供商的SQLiteDatabase覆盖方法中调用insert()更新方法?

2 个答案:

答案 0 :(得分:26)

基本上没问题,但由于你没有提供代码,我只能发布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键。

答案 1 :(得分:5)

您可以选择在重写方法中编写的内容。 是的,没关系。

我不知道您要做什么,但您可能也想查看SQLiteDatabase的{​​{1}}方法。也许它更适合你的需求。