Android Contentprovider - update within an insert method

前端 未结 2 1595
孤街浪徒
孤街浪徒 2021-01-02 04:30

Is it ok to call the SQLiteDatabase update method in the insert() overridden method of a content provider?

2条回答
  •  忘掉有多难
    2021-01-02 04:42

    Basically it's fine, but since you didn't provided code, I just can post 2 possible ways for it

    First:

    // In your content provider
    public Uri insert(...) {
        long insertId = db.insert(...);
    
        if(insertId == -1) {
            // insert failed, do update
            db.update(...);
        }
    }
    

    Second:

    public Uri insert(...) {
        long insertId = db.insertWithOnConflict(table, null, values, SQLiteDatabase.CONFLICT_REPLACE)
    
        if(insertId == -1) {
            // insert and update/replace failed
        }
    }
    

    Check out SQLiteDatabase for reference on the forth parameter. In most cases the last method should be sufficient, unless you want only certain fields being updated if the row exists and have all fields if it doesn't.

    Most useful need for insertWithOnConflict may be, that you could insert a row and if it already exists, ignore the insert and instead return the Uri/primary key of the already existing row.

提交回复
热议问题