加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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表中插入了数据。搞不懂是什么原因,哪位大侠清楚,指教一下。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读