Content Provider中的SQLite“数据库架构已更改”错误

时间:2011-06-03 11:06:29

标签: android sqlite android-contentprovider android-syncadapter

我正在使用Content ProvidersSync Adapters进行同步例程。

我的例程收到JSONObject并插入或更新条目。

为了确定我们是否要更新或插入,我们检查数据库中是否存在该条目。这是发生sqlite错误的地方。

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]

我做了一些研究并找到了关于这个主题的this讨论。从这个讨论中我了解到必须调用sqlite_exec()。我如何在内容提供商中实现这一点?

修改

插入/更新检查

// 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 ::更新

@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, values, ID + " = " + uri.getPathSegments().get(0) + (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""), selectionArgs);
        break;
    default:
        count = 0;
    }
    return count;
}

1 个答案:

答案 0 :(得分:1)

问题解决了。我不确定为什么但是在模拟器图像擦除之后,一切都正常了它应该怎么做。谢谢你的时间塞尔文!