关于blackberry平台下sqlite事务的处理方式

前端之家收集整理的这篇文章主要介绍了关于blackberry平台下sqlite事务的处理方式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

今天开发的时候遇到一个用例,简单描述就是在删除一张表里面某条数据的同事,要删除另外的一张表,注意是一张表,而不是记录。

代码实现:

  1. /**
  2. * 删除单个对话以及对话包含的消息表
  3. * @param uuid
  4. * @return
  5. */
  6. public boolean deleteSingleChat(long uuid){
  7. Statement st = null;
  8. Database db = super.getsqliteDatabase();
  9. try {
  10. db.beginTransaction();
  11. st = db.createStatement(DELETE_CHAT_sql);
  12. st.prepare();
  13. st.bind(1,uuid);
  14. st.execute();
  15. st.close();
  16. st = db.createStatement(DROP_MSG_TABLE + MsgSchema.MSG_TABLE_NAME_HEAD + uuid + ";");
  17. st.prepare();
  18. st.execute();
  19. db.commitTransaction();
  20. return true;
  21. } catch (DatabaseException e) {
  22. return false;
  23. }finally{
  24. super.closeStatement(st);
  25. }
  26. }
  1.  

这里需要注意的就是你必须要开启事务来保证业务的一致性。

所以需要

  1. db.beginTransaction();
  2. .....
  3. db.commitTransaction();
那么在事务中有任何的问题和异常,sqlite都会回滚操作。

其次还应该注意对Statment的打开和关闭的时机,请注意,因为我要在事务里面操作两张表,也就是我需要两个Statment

  1. st = db.createStatement(DROP_MSG_TABLE + MsgSchema.MSG_TABLE_NAME_HEAD + uuid + ";");
  2.  
  3. st = db.createStatement(DELETE_CHAT_sql);


那么当我在第一次使用st之后,我必须要st.close(),然后在开启第二个st的时候仍然需要st.prepare();这样才能保证第二次正常的引用st对象。

还有就是在代码的finally里面要对st及时的关闭,避免内存泄漏。

猜你在找的Sqlite相关文章