Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLite事务回滚工具?_Android_Sqlite - Fatal编程技术网

Android SQLite事务回滚工具?

Android SQLite事务回滚工具?,android,sqlite,Android,Sqlite,我必须独立插入三张表。。但如果第一个表插入成功,则只需要第二个表来插入数据。如果插入第二个表时发生任何错误,则需要回滚第一个表的最后一个插入表,同样,第三个表也: 我现在是这样做的: DBAdapter dbAdapter = DBAdapter.getDBAdapterInstance(RetailerOrderActivity.this); dbAdapter.openDataBase(); for (Map.Entry<String, MyProduct> entr

我必须独立插入三张表。。但如果第一个表插入成功,则只需要第二个表来插入数据。如果插入第二个表时发生任何错误,则需要回滚第一个表的最后一个插入表,同样,第三个表也:

我现在是这样做的:

   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 DBAdapter=DBAdapter.getdbadapterninstance(RetailerOrderActivity.this);
dbAdapter.openDataBase();
对于(Map.Entry:myProductMap.entrySet()){
String key=entry.getKey();
MyProduct MyProduct=entry.getValue();
ContentValues initialValue=新的ContentValues();
initialValue.put(“业务单位”,strBusinessUnit);
initialValue.put(“ExecutiveCode”,strExecutive);
if(salesType.equalsIgnoreCase(“I”)){
put(“InvoiceNo”,transactionControl.getNextInvoiceNo());
initialValue.put(“SalesCategory”,transactionControl.getInvoicePrefix());
}else if(salesType.equalsIgnoreCase(“O”)){
put(“InvoiceNo”,transactionControl.getNextOrderNo());
initialValue.put(“SalesCategory”,transactionControl.getOrderPrefix());
}
initialValue.put(“ProductCode”,键);
初始值。输入(“行号”,i);
initialValue.put(“数量”,myProduct.getQty());
initialValue.put(“单价”,myProduct.getPrice());
initialValue.put(“折扣值”,myProduct.getDisValue());
initialValue.put(“折扣数量”,myProduct.getDisQty());
long nl=dbAdapter.insertRecordsInDB(“WMInvoiceLine”,null,initialValue);
//更新WMStockRecord表
如果(nl!=-1){
if((salesType.equalsIgnoreCase(“I”)和&orderStockValidation.equals(“1”))| |(salesType.equalsIgnoreCase(“O”)和&orderStockValidation.equals(“1”)){
ContentValues stockValue=新的ContentValues();
if(myProduct.getAvailableQuantity()

但这里没有交易不可用。我们如何实现事务工具?我使用的是
DBAdapter

您必须设置事务,如果事务成功,您必须提交该事务,否则您必须取消该事务

有关更多信息,请参考此答案