如何修改此SQLiteOpenHelper插入操作,使其成为ContentResolver操作(带事务)

时间:2014-09-01 07:52:28

标签: android

我有这个SQLiteOpenHelper操作,我需要成为一个ContentResolver操作,所以即使应用程序被销毁我也可以这样做

    sqliteOpenHelper.database.beginTransaction();
    try {

            ContentValues values = new ContentValues();
            values.put("userId", userId);
            values.put("userName", userName);
            values.put("userEmail", userEmail);

            sqliteOpenHelper.database.insert("users", null, values);
            sqliteOpenHelper.database.setTransactionSuccessful();

        } catch (Exception ex) {
            ex.printStackTrace();

        } finally {
            sqliteOpenHelper.database.endTransaction();
        }

通常我知道如何使用ContentResolver查询数据库,如下所示:

                Uri contentUri = Uri.withAppendedPath(ContentProviderDB.CONTENT_URI, "users");
                String selection = "user_id = " + String.valueOf(userId);
                cursor = context.getContentResolver().query(contentUri, null, selection, null, null);

但是在上面的INSERT中有交易,所以我不知道如何处理。

1 个答案:

答案 0 :(得分:1)

使用contentResolver.insert (uri, contentValues)


而不是:

sqliteOpenHelper.database.beginTransaction();
try {

    ContentValues values = new ContentValues();
    values.put("userId", userId);
    values.put("userName", userName);
    values.put("userEmail", userEmail);

    sqliteOpenHelper.database.insert("users", null, values);
    sqliteOpenHelper.database.setTransactionSuccessful();

} catch (Exception ex) {
    ex.printStackTrace();

} finally {
    sqliteOpenHelper.database.endTransaction();
}

你需要写:

try {
    ContentValues values = new ContentValues();
    values.put("userId", userId);
    values.put("userName", userName);
    values.put("userEmail", userEmail);
    Uri uri = mContext.getContentResolver().insert(contentUri, values);

} catch (Exception ex) {
    ex.printStackTrace();

}