2013-12-17 4 views
0

им возникают сомнения относительно того, как procede с управлением базой данных с помощью BEGIN TRANSACTIONAndroid SQLite транзакций, два источники данных

У меня есть 2 источника данных объектов: ClientDataSource и MovementsDataSource

каждые из Theres имеет свой собственный объект SQLitedabase, который установленным с помощью метода Open(), с помощью набора его частного объекта базы данных с Writable Database.

Теперь мне нужно отправить записи из таблицы перемещений на сервер, а затем попросить обновленных клиентов с того же сервера.

Внутри моего класса i сначала Отправьте новые движения, затем, если удастся, удалите всех клиентов из SQLite и, наконец, извлеките новых Обновленных клиентов с сервера и вставьте их в базу данных.

Каждый источник данных имеет метод Get() для получения своего соответствующего объекта базы данных, но он фактически является той же базой данных, в которой они работают, и я не уверен, как использовать методы BaginTransction, Endtransaction для обеспечения согласованности данных.

это код из асинхронный 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; 
     } 

ответ

0

я должен дать один пример то, как работает BeginTransaction ...

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 не открывается или закрывается больше раз.

+0

Должен ли я просто начать beginTransaction() один раз, а затем в конце endTransaction .. ???. –

+0

like, clientDataSource.getDatabse(). BeginTransaction() –

+0

, а затем в конце clientDataSource.getDatabase(). EndTransaction() ,,, dont minding the data data data? –

Смежные вопросы