2011-10-04 3 views
6

3 개의 테이블을 독립적으로 삽입해야합니다. 그러나 첫 번째 테이블이 성공적으로 삽입되면 두 번째 테이블 만 데이터를 삽입해야합니다. 나는이 같은 현재 한Android SQLite 트랜잭션 롤백 기능?

: 2 표를 삽입하는 동안 오류가 발생하면, 그것은 마찬가지로 3 테이블도 1 테이블의 마지막에 삽입 한 롤백 할 필요가

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