zoukankan      html  css  js  c++  java
  • 每日日报

    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. }
  • 相关阅读:
    【杂谈】需要mark的一些东西
    【codeforces】940F题解
    【codeforces】【比赛题解】#940 CF Round #466 (Div. 2)
    【FCS NOI2018】福建省冬摸鱼笔记 day6【FJOI 2018】福建省选混分滚蛋记 day1
    【FCS NOI2018】福建省冬摸鱼笔记 day5
    【FCS NOI2018】福建省冬摸鱼笔记 day4
    【FCS NOI2018】福建省冬摸鱼笔记 day3
    【FCS NOI2018】福建省冬摸鱼笔记 day2
    【FCS NOI2018】福建省冬摸鱼笔记 day1
    【6】装饰器、闭包、偏函数、变量作用域问题
  • 原文地址:https://www.cnblogs.com/zhukaile/p/14376771.html
Copyright © 2011-2022 走看看