Android SQLite Transaction,两个数据源

时间:2013-12-17 05:59:01

标签: android sqlite transactions

我对如何使用Begin Transaction

进行数据库操作表示怀疑

我有2个数据源对象:ClientDataSource和MovementsDataSource

每个都有自己的SQLitedabase对象,该对象使用Open()方法设置,并使用可写数据库设置其数据库私有对象。

现在,我必须将记录从移动表发送到服务器,然后从同一服务器请求更新的客户端。

在我的课程中,我首先发送新动作,然后如果成功,从SQLite中删除所有客户端,最后从服务器检索新的更新客户端并将它们插入数据库。

每个数据源都有一个Get()方法来获取它们各自的数据库对象,但它实际上是它们运行的​​同一个数据库,我不知道如何使用BaginTransction,Endtransaction方法来确保数据的一致性

这是Async Task的代码

@Override
        protected Boolean doInBackground(String... url) {

            try {
                clientDataSource.open();
                movementDataSource.open();
            } catch (SQLException e) {
                //Treat SQL Exception
            }

            try {
                if(sendMovements()) {
                    clientDataSource.deleteAllClients();
                }
                updateDatabase(url[0]);
            } catch (JSONException e) {
                //Treat Json Exception
            } catch (IOException e) {
                //Treat IOException
            }

            return true;
        }

1 个答案:

答案 0 :(得分:0)

我必须举一个例子,然后知道如何运作...

public static void Insert(ArrayList<Model_CategoryMaster> categoryMasters) {
        SQLiteDatabase sqldb = EGLifeStyleApplication.sqLiteDatabase;
        sqldb.beginTransaction();
        for (Model_CategoryMaster model : categoryMasters) {
            ContentValues values = new ContentValues();
            values.put(CATEGORY_ID, model.Category_Id);
            values.put(CATEGORYNAME, model.CategoryName);
            values.put(DESCRIPTION, model.Description);
            values.put(ISACTIVE, model.IsActive);
            values.put(CREATEDON, model.CreatedOn);
            values.put(CREATEDBY, model.CreatedBy);
            values.put(UPDATEDON, model.UpdatedOn);
            values.put(UPDATEDBY, model.UpdatedBy);
            values.put(ISDELETED, model.IsDeleted);
            values.put(DELETEDON, model.DeletedOn);
            values.put(DELETEDBY, model.DeletedBy);
            values.put(PK_CATEGORYMASTER, model.PK_CategoryMaster);
            if (!CommonMethod.CheckIsDataAlreadyInDBorNot(Table_Name,
                    CATEGORY_ID, model.Category_Id)) {
                sqldb.insert(Table_Name, null, values);
            } else {
                sqldb.update(Table_Name, values, "Category_Id=?",
                        new String[] { model.Category_Id });
            }
        }
        sqldb.setTransactionSuccessful();
        sqldb.endTransaction();
    }// End insert method

开始事务意味着数据将获得arraylist然后db将打开一次并且sql.begintansaction()用于获得更快的数据库操作。因为db没有打开或关闭更多次。