每日日报

Android中数据库事务

事务概念

             在事务中包含的sql,要么同时执行成功 要么同时执行失败, 不能出现 部分成功部分失败的情况 典型案例 银行转账

 相关api

  1. db.beginTransaction();//开启事务
  2. try {
  3. ...
  4. db.setTransactionSuccessful();//如果所有SQL都执行完毕则标记成功
  5. } finally {
  6. db.endTransaction();//如果有成功标记则关闭事务,没有成功标记回滚数据
  7. }

 具体代码

MyOpenHelper类
  1. public class MyOpenHelper extends SQLiteOpenHelper {
  2. public MyOpenHelper(Context context) {
  3. super(context, "Account.db", null, 1);
  4. }
  5. @Override
  6. public void onCreate(SQLiteDatabase db) {
  7. db.execSQL("create table info (_id integer primary key autoincrement,name varchar(20),phone varchar(20),money varchar(20))");
  8. db.execSQL("insert into info ('name','phone','money') values ('张三','138888','2000')");
  9. db.execSQL("insert into info ('name','phone','money') values ('李四','139999','5000')");
  10. }
  11. @Override
  12. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  13. }
  14. }
MainActivity类
  1. public class MainActivity extends Activity {
  2. private MyOpenHelper openHelper;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. //获取MyOpenHelper 用它可以获取SQLiteDatabase
  8. openHelper = new MyOpenHelper(this);
  9. }
  10. public void transaction(View v){
  11. SQLiteDatabase database = openHelper.getWritableDatabase();
  12. //开启事务
  13. database.beginTransaction();
  14. try {
  15. database.execSQL("update info set money= money-200 where name=?",new String[]{"张三"});
  16. //int i = 100/0;
  17. database.execSQL("update info set money= money+200 where name=?",new String[]{"李四"});
  18. //事务所有的sql执行成功之后 调用 setTransactionSuccessful 会加上一个标记说明事务成功执行了
  19. database.setTransactionSuccessful();
  20. } catch (Exception e) {
  21. Toast.makeText(getApplicationContext(), "服务器忙,请稍后再试", 0).show();
  22. }finally {
  23. //事务结束 会检查标记 如果没有成功标记则回滚 如果有成功标记则提交生效
  24. database.endTransaction();
  25. }
  26. }
  27. }
原文地址:https://www.cnblogs.com/zhukaile/p/14376771.html