zoukankan      html  css  js  c++  java
  • 安卓 SQLite error:SQLite database locked exception while compling : PRAGMA journal_mode .....

    项目中频繁的切换Tab键,会频繁地从数据库读取数据,这是报出这样的错误:

    解决方法是在国外的某论坛找到的 :

    在插入数据的时候,首先:

    SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(f, null);
    db.beginTransaction();   ////开启一个事务
    db.insert(HJZ_SQLiteOpenHelper.TABLE_NAME_KP, null, cv);
    db.setTransactionSuccessful(); //必须加这一句,否则插入不了数据
    db.endTransaction();  ////关闭一个事务
    db.close();

    原因:是4.0以前的版本db.close();会结束事务,而Jelly Bean 以后的版本因为安全性的问题,必须结束即endTransactiony以后才能再次访问本地数据库。哎。。苦逼的百度啊。。另外,吐槽一下不向下兼容的Android

    PS:android中,对数据库进行批量操作时,建议先打开会话:

    db.beginTransaction();

    //批量insert或者update等
    db.setTransactionSuccessful();
    db.endTransaction();

    这样之后,在大数据量的处理是灰常的高效,

    实际中,减少了3~10倍的时间。

    另外,在重写ContentProvider时,不要针对数据的读写加同步了,因为底层数据库已经做了同步保护,上层再加上同步保护多余,而且非常影响效率。

  • 相关阅读:
    NSIndexPath 延伸
    iOS进阶推荐的书目
    配置App真机测试证书的流程 一览
    NSAttributedString 的21种属性 详解
    KVO & 通知 小记
    贝塞尔曲线 & CAShapeLayer & Stroke 动画 浅谈
    提升开发人员修为的探讨
    热门IOS 第三方库
    drawRect & 内存 -> 深究
    CALayer & UIView 关系浅析
  • 原文地址:https://www.cnblogs.com/lucky-star-star/p/4011840.html
Copyright © 2011-2022 走看看