SQLite原理、升级与降级

来源:互联网 发布:数据清洗工具 编辑:程序博客网 时间:2024/05/22 09:04

SQLite: https://www.sqlite.org/pragma.html#pragma_page_size

> SQLite原理

SQLite前端解析系统,SQLite后端引擎;创建索引,创建视图,创建触发器,drop命令
sqlite的后端系统设计原理- http://www.kubiji.cn/juhe-id6724.html
SQLite剖析(5):体系结构- http://blog.csdn.net/zhoudaxia/article/details/8196838
sqlite 视图、触发器、索引和事务总结- http://blog.csdn.net/hustyangju/article/details/17488309

 SQLite由以下几个组件组成:SQL编译器、内核、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得更加方便。
 SQLite的存储后端是采用Btree实现,多个连接可以并发操作,但是同一时间只允许一个写着存在。
 sqlite是一个功能相对完整的数据库系统。一个传统的数据库系统大体都可以划分成以下几部分:connector pool(网络层,提供CS模式的数据库访问支持);sql 解析&优化器;数据管理&缓存;存储引擎&虚拟机;文件系统抽象层(OS层,屏蔽各种不同操作系统的API差异)。sqlite除了没有网络层的支持外,整体架构也基于以上的架构。整体上sqlite的功能系统被划分成两部分,即frontend(前端)和backend(后端)。前端实现sql的语法解析,生成sqlite虚拟机支持的中间代码;后端实现sqlite的文件结构、数据组织、存储缓存管理、VDBE虚拟机等功能。
 sqlite前端包括词法分析器、语法分析器与中间代码生成器三部分。
 sqlie内部用pager模块实现整个页管理功能。pager模块介于B+树和OS层之间,提供基于页的数据存储&缓存、锁管理以及日志管理功能。其中锁管理与日志管理结合实现了sqlite的事务支持,而页的存储缓存则提供了统一的读写服务,屏蔽上层调用对磁盘与内存的感知。
  sqlite的页在实际应用中被划分为leaf、internal、overflow及free四种类型的逻辑页。
 sqlite的Pager提供了对页一级的读写、锁、日志等操作。但是并没有实现任何数据库相关的概念(如表、索引、事务等)。
 sqlite的表是由B+树实现的。sqlite选用B–树来实现索引,这样索引占用的内存空间相对更少,容易加载到内存中。B–树和B+树都是多路平衡搜索树。
 sql的后端最上层就是sqlite的虚拟机VDBE(virtual database engine)[4]。VDBE是sqlite前端和后端的桥梁,sqlite的核心运行过程都是在VDBE中实现的。一个VDBE对象包括以下数据:
  ∙ 一个由sql解析器生成的字节码
  ∙ 查询column的名称和数据类型
  ∙ 输入参数值
  ∙ 程序计数器

> SQLiteException: no such table(GreenDao),SQLite创建表与更新表与版本号的联系??

SQLite版本号升级时,会执行DatabaseOpenHelper的onCreate()??

App版本更新时对SQLite数据库表的修改问题- http://blog.csdn.net/u013067184/article/details/48031081
SQLiteException: table TAREAS has no column - https://stackoverflow.com/questions/36308339/greendao-android-database-sqlite-sqliteexception-table-tareas-has-no-column-na , https://stackoverflow.com/questions/934237/sqlite-exception-no-such-table-error

版本更新时,sqlite表结构发生变化了该怎样处理,最有效的方案就是先删除老的数据,重新调用onCreate(db);
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  context.deleteDatabase(DB_NAME);
  onCreate(db);
}

GreenDaoUpgradeHelper-https://github.com/yuweiguocn/GreenDaoUpgradeHelper

Android SQLite数据库版本升级原理解析- http://www.cnblogs.com/liqw/p/4264925.html
App版本更新时对SQLite数据库表的修改问题- http://blog.csdn.net/u013067184/article/details/48031081
Android SQLite数据库的数据升级与降级- http://www.cnblogs.com/zhaoyucong/p/6118226.html
主要的三个方法:
onCreate()该方法是在你没有安装过(第一次运行)的时候执行,这时可以在这个函数中完成初始的数据表的创建
onUpgrade()该方法是在你安装过的情况下,对数据继续更新的时候执行,这时可以在这个函数完成数据库版本升级带来的旧版本的兼容问题,以及数据迁移问题。
onDowngrade()该方法是在现逆向降级(如应用由版本号4降级安装版本号为3的包)时必须重写的方法,如果应用降级覆盖安装时没有重写该方法则会崩溃。

onCreate:调用时机是用户首次安装应用后启动,或是清除App数据库文件后启动。这时可以在这个函数中完成初始的数据表的创建。
onUpgrade:调用时机是用户在做应用更新,覆盖安装后启动,如果新版本中数据库版本号要比旧版本中的数据库版本号高则会调用。这时可以在这个函数完成数据库版本升级带来的旧版本的兼容问题,以及数据迁移问题。

因为有的用户手机上本来就有第一版本的APP,所以在App升级到第二版本时会执行onUpgrade(),不会执行onCreate()。
阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 不知情收赃东西已经卖了怎么办 档案和派遣证不在同一个地方怎么办 档案缺招工表和派遣证怎么办退休 开发商对接的银行利息比较高怎么办 工作未满一年离职转正定级怎么办 被网络骗贷翻到几十万怎么办 面试通过后迟迟不通知入职怎么办 厂里捡到饭卡花了里面的钱怎么办 上班用自己手机打卡没电怎么办 逸尚考勤机显示超出考勤记录怎么办 下雨穿套裙工装上班好冷怎么办 蚂蚁借呗放款中不到账怎么办 护士电子化注册没有激活码怎么办? 地铁站务员入职体检身高差点怎么办 车子钥匙锁在车里了怎么办 打错账户了怎么办5天了 下岗失业人员在就业后档案怎么办 皮秒祛斑后没有敷面膜怎么办 硕士毕业工资好低不想工作怎么办 车卖了etc忘拿了怎么办 成熟卵泡打破卵针也不破怎么办? 深圳孩子户口挂别人名下上学怎么办 襄阳东风合运花园房贷怎么办下来 猫在外面躲起来找不到了怎么办 本科三批取消以后三本学校怎么办 机票名字多了个字母安检怎么办 出隧道口限速40超速了怎么办 社保交了五年后断交以后该怎么办 躺椅折叠椅坐的地方坏了怎么办 苹果手机锁频密码忘了怎么办 客户要货公司不给进怎么办 高铁23:00买的票怎么办 带电子手刹的车刹车失灵怎么办 下坡刹车失灵遇行人不看车怎么办 跟大车后面看不见红灯闯了怎么办 跟着大货车后面闯了红灯怎么办 如果用工单位不发放加班工资怎么办 事故家属要司机向医院多交钱怎么办 在大学里和室友关系弄僵怎么办 房产证办出来房产局不给证怎么办 单位全员竞聘老员工没岗位怎么办