Android数据库事务
我创建了一个数据库。我想做交易。SaveCustomer()
包含多个语句,以便Customer, CustomerControl, Profile, Payment
在那时将记录插入表中。
当用户调用 SaveCustomer()
方法时,该数据将转到这4个表。所以我该如何进行交易?如果一个表插入失败,则需要回滚所有内容。例如,当第3个表插入记录时出现错误,那么还需要回滚前两个表的插入记录。
看我的代码:
public void saveCustomer(){ DBAdapter dbAdapter = DBAdapter.getDBAdapterInstance(RetailerOrderKeyActivity.this); dbAdapter.openDataBase(); ContentValues initialValues = new ContentValues(); initialValues.put("CustomerName",customer.getName()); initialValues.put("Address",customer.getAddress()); initialValues.put("CustomerPID",strPID); initialValues.put("Date",strDateOnly); long n = dbAdapter.insertRecordsInDB("Customer", null, initialValues);}
同样其他声明也在那里。
DBAdpter代码是:
public long insertRecordsInDB(String tableName, String nullColumnHack,ContentValues initialValues) { long n =-1; try { myDataBase.beginTransaction(); n = myDataBase.insert(tableName, nullColumnHack, initialValues); myDataBase.endTransaction(); myDataBase.setTransactionSuccessful(); } catch (Exception e) { // how to do the rollback e.printStackTrace(); } return n;}
这是完整的代码:
public class DBAdapter extends SQLiteOpenHelper { private static String DB_PATH = "/data/data/com.my.controller/databases/"; private static final String DB_NAME = "customer"; private SQLiteDatabase myDataBase; private final Context myContext; private static DBAdapter mDBConnection; private DBAdapter(Context context) { super(context, DB_NAME, null, 1); this.myContext = context; DB_PATH = "/data/data/" + context.getApplicationContext().getPackageName() + "/databases/"; // The Android's default system path of your application database is // "/data/data/mypackagename/databases/" }
相关分类