adsense728x90


android sqlite replace만으로 insert or update가 될지도 Android

sqlite insert or replace 좋네. unique key에도 먹혀.

replace 구현을 보니, CONFLICT_REPLACE가 들어 있었네.
어차피 insert on conflict replace를 하는 것인가보다.
insertOrThrow를 미리 해볼 필요 없이 replace()만 해도 insert를 시도하겠다.
단, table의 create sql script에는 on conflict ignore, replace가 들어 있지 않은 것이 좋겠다.

    public long replace(String table, String nullColumnHack, ContentValues initialValues) {

        try {

            return insertWithOnConflict(table, nullColumnHack, initialValues,

                    CONFLICT_REPLACE);

        } catch (SQLException e) {

            Log.e(TAG, "Error inserting " + initialValues, e);

            return -1;

        }

    }


ContentProviderOperations 에서 applyBatch를 해도
Provider의 insert가 불리기 때문에,
insert안에서 CONFLICT_REPLACE 처리를 하면, insert or update를 할 수 있다.

그런데, table에 이미 on conflict ignore가 있으면, exception이 발생하지 않고, -1을 return하니까 insertOrThrow로 판단하는 것은 조심하기.

덧글

댓글 입력 영역