开发者

SQLite "database schema has changed" error in Content Provider

开发者 https://www.devze.com 2023-03-10 00:22 出处:网络
I\'m using Content Providers and Sync Adapters for my synchronization routine. My routine receives a JSONObject and insert or update the entry.

I'm using Content Providers and Sync Adapters for my synchronization routine.

My routine receives a JSONObject and insert or update the entry.

In order to decide if we are going to update or insert we check if the entry exists in the database. This is where the sqlite error occurs.

06-03 10:58:21.239: INFO/Database(340): sqlite returned: error code = 17, msg = prepared statement aborts at 45: [SELECT * FROM table WHERE (id = ?) ORDER BY id]

I have done some research and found this discussion about the subject. From this discussion I understand that sqlite_exec() has to be called. How would I implement this in a Content Provider?

Edit

Insert / Update check

// Update or Insert
ContentValues cv = new ContentValues();
/* put info from json into cv */
if(mContentResolver.update(ClientsProvider.CONTENT_URI, cv, null, null) == 0) {
    // add remote id of entry
    cv.put("rid", o.optInt("id"));
    mContentResolver.insert(ClientsProvider.CONTENT_URI, cv);
}

ContentProvider::update

@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
    int count = 0;
    switch(uriMatcher.match(uri)) {
    case CLIENTS:
        count = clientDB.update(TABLE_NAME, values, selection, selectionArgs);
        break;
    case CLIENT_ID:
        count = clientDB.update(TABLE_NAME, value开发者_C百科s, ID + " = " + uri.getPathSegments().get(0) + (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""), selectionArgs);
        break;
    default:
        count = 0;
    }
    return count;
}


Problem is solved. I'm not sure why but after an emulator image wipe everything works exactly how its supposed to do. Thank you for your time Selvin!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号