2011-10-04 17 views
6

Devo inserire tre tabelle in modo indipendente .. ma se la prima tabella viene inserita correttamente, solo la 2a tabella è necessaria per inserire i dati. Se si verifica un errore durante l'inserimento del secondo tavolo, quindi ha bisogno di rollback ultimo inserito prima del tavolo, allo stesso modo il terzo tavolo anche:SQLite Android Transaction rollback facility?

ho fatto al momento come questo:

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; 
       } 

ma qui non è operazione non a disposizione. Come possiamo implementare la funzione di transazione? Sto usando DBAdapter

risposta

4

Devi impostare la transazione e devi commettere quella transazione se ha successo altrimenti devi cancellare quella transazione.

per ulteriori informazioni è possibile consultare questa risposta

Transaction in sqlite

Problemi correlati