关于blackberry平台下sqlite事务的处理方式
发布时间:2020-12-12 20:28:41 所属栏目:百科 来源:网络整理
导读:今天开发的时候遇到一个用例,简单描述就是在删除一张表里面某条数据的同事,要删除另外的一张表,注意是一张表,而不是记录。 代码实现: /** * 删除单个对话以及对话包含的消息表 * @param uuid * @return */public boolean deleteSingleChat(long uuid){S
今天开发的时候遇到一个用例,简单描述就是在删除一张表里面某条数据的同事,要删除另外的一张表,注意是一张表,而不是记录。 代码实现: /** * 删除单个对话以及对话包含的消息表 * @param uuid * @return */ public boolean deleteSingleChat(long uuid){ Statement st = null; Database db = super.getSQLiteDatabase(); try { db.beginTransaction(); st = db.createStatement(DELETE_CHAT_SQL); st.prepare(); st.bind(1,uuid); st.execute(); st.close(); st = db.createStatement(DROP_MSG_TABLE + MsgSchema.MSG_TABLE_NAME_HEAD + uuid + ";"); st.prepare(); st.execute(); db.commitTransaction(); return true; } catch (DatabaseException e) { return false; }finally{ super.closeStatement(st); } } 这里需要注意的就是你必须要开启事务来保证业务的一致性。 所以需要 db.beginTransaction(); ..... db.commitTransaction();那么在事务中有任何的问题和异常,sqlite都会回滚操作。 其次还应该注意对Statment的打开和关闭的时机,请注意,因为我要在事务里面操作两张表,也就是我需要两个Statment st = db.createStatement(DROP_MSG_TABLE + MsgSchema.MSG_TABLE_NAME_HEAD + uuid + ";"); st = db.createStatement(DELETE_CHAT_SQL); 那么当我在第一次使用st之后,我必须要st.close(),然后在开启第二个st的时候仍然需要st.prepare();这样才能保证第二次正常的引用st对象。 还有就是在代码的finally里面要对st及时的关闭,避免内存泄漏。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- C:不完整的返回类型
- swift- 去除tableView 多余行
- C语言对字符串进行转义excape操作
- ruby-on-rails – Rails Checkout SSL heroku
- dojo框架用hitch实现函数与上下文的绑定
- OC 在NSJSONSerialization 过滤JSON解析不了的掉特殊字符
- ruby-on-rails – 来自带对象的字符串的命名路由
- c# – 如何在ConcurrentDictionary中设置一个值,无论它是否
- c# – FileNotFoundException在System.DirectoryServices.I
- 20131226开始学习NoSQL,学习记录一