Android Contentprovider - 在插入方法中更新

Mak*_*Mak 11 android android-contentprovider

是否可以SQLiteDatabaseinsert()内容提供程序的重写方法中调用update方法?

Tse*_*eng 26

基本上它很好,但由于你没有提供代码,我只能发布2种可能的方法

第一:

// In your content provider
public Uri insert(...) {
    long insertId = db.insert(...);

    if(insertId == -1) {
        // insert failed, do update
        db.update(...);
    }
}
Run Code Online (Sandbox Code Playgroud)

第二:

public Uri insert(...) {
    long insertId = db.insertWithOnConflict(table, null, values, SQLiteDatabase.CONFLICT_REPLACE)

    if(insertId == -1) {
        // insert and update/replace failed
    }
}
Run Code Online (Sandbox Code Playgroud)

查看SQLiteDatabase以获取第四个参数的参考.在大多数情况下,最后一个方法应该足够了,除非您只想在行存在时更新某些字段并且如果不存在则包含所有字段.

insertWithOnConflict最有用的需求可能是,您可以插入一行,如果它已经存在,则忽略该插入,而是返回已存在行的Uri /主键.


Edi*_*Edi 5

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

我不知道你想做什么,但你可能要采取的看SQLiteDatabasereplace()方法了.也许它更适合您的需求.