Возможность отката транзакций Android SQLite? - PullRequest
6 голосов
/ 04 октября 2011

Я должен вставить три таблицы независимо друг от друга ... но если первая таблица вставлена ​​успешно, то для вставки данных требуется только вторая таблица. Если при вставке 2-й таблицы возникает ошибка, необходимо выполнить откат последней вставленной таблицы 1-й таблицы, также как и 3-й таблицы:

Мне сейчас нравится:

   DBAdapter dbAdapter = DBAdapter.getDBAdapterInstance(RetailerOrderActivity.this);
dbAdapter.openDataBase();
   for (Map.Entry<String, MyProduct> entry : myProductMap.entrySet()) {
                    String key = entry.getKey();
                    MyProduct myProduct = entry.getValue();

                    ContentValues initialValue = new ContentValues();
                    initialValue.put("BusinessUnit",strBusinessUnit);
                    initialValue.put("ExecutiveCode",strExecutive);

                    if(salesType.equalsIgnoreCase("I")){
                        initialValue.put("InvoiceNo",transactionControl.getNextInvoiceNo());
                        initialValue.put("SalesCategory",transactionControl.getInvoicePrefix());

                    }else if(salesType.equalsIgnoreCase("O")){
                        initialValue.put("InvoiceNo",transactionControl.getNextOrderNo());
                        initialValue.put("SalesCategory",transactionControl.getOrderPrefix());
                    }
                    initialValue.put("ProductCode",key);
                    initialValue.put("LineNumber",i);
                    initialValue.put("Qty",myProduct.getQty());
                    initialValue.put("UnitPrice",myProduct.getPrice());
                    initialValue.put("DiscountValue",myProduct.getDisValue());
                    initialValue.put("DiscountQty",myProduct.getDisQty());


                    long nl = dbAdapter.insertRecordsInDB("WMInvoiceLine", null, initialValue); 

                   //update WMStockRecord table
                    if(nl != -1 ){

                        if((salesType.equalsIgnoreCase("I") && orderStockValidation.equals("1")) || (salesType.equalsIgnoreCase("O") && orderStockValidation.equals("1"))){
                            ContentValues stockValue = new ContentValues();
                            if(myProduct.getAvailableQuantity() < myProduct.getQty()){
                                stockValue.put("Stock",0.00);
                            }else{
                                double tmp = myProduct.getAvailableQuantity() - myProduct.getQty();
                                stockValue.put("Stock",tmp);
                            }
                            stockValue.put("LastUpdatedOn",strDate);
                            stockValue.put("LastUpdatedBy",strExecutive);
                            stockValue.put("ActiveStatus","1");

                            String whereCon = "BusinessUnit = '"+ strBusinessUnit +"' WarehouseCode = '"+defaultSalesWarehouse + "' LocationCode = '" + defaultSalesLocation + "' ProductCode = '" + key + "'";
                            long stock = dbAdapter.updateRecordsInDB("WMStockRecord", stockValue, whereCon, null);
                      }

                        //TO-DO WMInvoicekit
                    }

                    i++;
                   insertStatus = true;
                   lineStatus = true;
                }

но транзакция недоступна. Как мы можем реализовать средство транзакции? Я использую DBAdapter

1 Ответ

4 голосов
/ 04 октября 2011

Вы должны установить транзакцию, и вы должны совершить эту транзакцию, если она прошла успешно, иначе вы должны отменить эту транзакцию.

для получения дополнительной информации вы можете обратиться к этому ответу

Транзакцияв sqlite

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...