2011-10-04 44 views
6

我必须独立插入三个表..但如果第一个表插入成功,那么就只需要第二个表中插入数据。如果同时插入第二个表发生任何错误,那么它需要回滚第一个表的最后插入的一个,同样是第三台也:Android SQLite事务回滚工具?

我没有目前这样的:

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

回答

4

必须设置的交易,你必须提交该交易如果成功,否则你不得不取消该交易。

更多信息,你可以参考这个答案

Transaction in sqlite