SQLite事务学习记录
发布时间:2020-12-12 20:19:28 所属栏目:百科 来源:网络整理
导读:直接上代码,下面是我做的测试 ContentValues values=new ContentValues();String[] names={"张三","李四","王五","马六","冯七","王八"};//DataBaseHelper helper=new DataBaseHelper(DataBaseActivity.this,"test_mars_db");if(db==null){db=openOrCreateD
直接上代码,下面是我做的测试 ContentValues values=new ContentValues(); String[] names={"张三","李四","王五","马六","冯七","王八"}; // DataBaseHelper helper=new DataBaseHelper(DataBaseActivity.this,"test_mars_db"); if(db==null){ db=openOrCreateDatabase("test_mars_db",MODE_WORLD_WRITEABLE,null); } db.beginTransaction();//开户事务 try { for(String name:names){ values.put("name",name); values.put("address","花园路"); db.insert("user",null,values); Log.d(TAG,"插入:"+values.toString()); } values.put("name","test"); // db.insert("users",values);////1 // db.execSQL("update user set n='1' where id=2");////2 db.setTransactionSuccessful();//设置事务标志为true } catch (Exception e) { e.printStackTrace(); }finally{ //为何要加try...catch //因为添加了db.setTransactionSuccessful(),若execSQL中出现问题 //则不会执行db.endTransaction() db.endTransaction(); //结束事务,有2种情况:commit,rollback } db.close(); 通过上面的代码发现了一点问题,建好数据库中只有表user,当将红色标记1的代码注释掉,即执行红色标记2的代码,事务会回滚,Logcat中打出一串警告,提示没有名称为"n"的列。但是反过来,即注释掉2的代码,执行1的代码,也是就是往一个不存在的表中插数据,这时候程序会报错,但事务却没有回滚,依然向user表中插入了数据。搞不懂是什么原因,哪位大侠清楚,指教一下。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |