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
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()。
- SQLite原理、升级与降级
- sqlite数据库的创建,升级和降级
- React Native 版本升级与降级
- React Native 版本升级与降级
- React Native 版本升级与降级
- React Native库版本升级与降级
- Gradle版本管理-升级与降级
- tensorflow不同版本安装与升级/降级
- Gradle版本管理-升级与降级(对应关系非常清晰)
- App版本更新时对SQLite数据库升级或者降级遇到的问题
- App版本更新时对SQLite数据库升级或者降级遇到的问题
- Android版本更新时对SQLite数据库升级或者降级遇到的问题
- App版本更新时对SQLite数据库升级或者降级遇到的问题
- App版本更新时对SQLite数据库升级或者降级遇到的问题
- App版本更新时对SQLite数据库升级或者降级遇到的问题
- App版本更新时对SQLite数据库升级或者降级遇到的问题
- App版本更新时对SQLite数据库升级或者降级遇到的问题
- App版本更新时对SQLite数据库升级或者降级遇到的问题
- 练习70
- 从数组中取出n个元素的所有组合(递归实现)
- 关于 position
- Android Audio 音频输出设备切换
- Log.isLoggable之一正确的使用姿势
- SQLite原理、升级与降级
- 89. Gray Code(第十四周)
- 代码控制一段时间只触发一次事件(防止多次点击) Android
- jvm 相关整理之参数配置方式
- 大数据之大数相减
- Opengl 学习 包含画三角形,正方形,贴图,鱼眼矫正
- JSONP跨域请求数据报错 “Unexpected token :”的解决办法
- Fiddler证书安装(查看HTTPS)
- 在一台机器上配置多个jdk和Tomcat