加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite高级用法收集

发布时间:2020-12-12 19:27:11 所属栏目:百科 来源:网络整理
导读:sqlite是一个比较小巧的数据库,最大的好处就是无安装嵌入式,文档和资料也比较多(我早期做windows应用开发使用access作为数据库,资料太难查了),当然功能也远没有mysql等高级数据库强大,下面就我平时使用过程中总结一些用法。 内容会持续更新,从今天开

sqlite是一个比较小巧的数据库,最大的好处就是无安装嵌入式,文档和资料也比较多(我早期做windows应用开发使用access作为数据库,资料太难查了),当然功能也远没有mysql等高级数据库强大,下面就我平时使用过程中总结一些用法。


内容会持续更新,从今天开始以后尽量将总结放到博客而不是本地笔记。


1.查询sqlite数据库容量

由于每个sqlite数据都是一个文件,直接查询文件大小也可以(我没试过),不过推荐用sqlite内置的sql语句查询,sqlite支持以下2条语句:

PRAGMA page_size; 查询页大小

PRAGMA page_count; 查询页数量

上面2个语句直接执行sql即可,返回的是64位整数,2个相乘就是当前db文件的大小,一般来说页大小是固定的,实在sqlite编译期间就指定好了,变化的是页数量。


2.压缩sqlite数据库

数据库删除数据后容量并不会释放,我用过的sqlite,access,mysql,SQLserver都是这样,在sqlite中,如果想释放空间,则执行:VACUUM; 语句即可,执行时间根据数据库当前容量而定,这里做好处理,其实sqlite也并不是释放容量,而是重新创建一个并将原来的数据导入后删除原来的文件。


3.sqlite多线程问题

当然,多线程其实和sqlite并没有关系,sqlite的规则很简单:只允许一个插入,允许多个读取。作为一个简单的嵌入式数据库,做到这样就可以了,做多了反而将事情弄复杂了。但是在项目中免不了多对象插入,这个时候怎么办呢?下面谈谈我自己的几个处理方法

3.1 建立一个主数据库文件main.db,用来存储一些数据量不大的关系数据

3.2 对于多对象的大数据量存储,每个对象用一个数据文件保存,数据库文件文件名称用该对象的id(比如在main.db中存储该对象的自增id)

3.3 对于实在需要多个对象插入同一个表格,可以自己在程序里面实现一个插入队列来排队插入,实现的时候可以用生产者-消费者模型或者 消息循环都行

3.4 有时候3.2 3.3可以结合使用,比如一个对象有很多数据,但是其实真正需要做相互关系比较或统计的数据其实只有几个,这样可以再单独讲这个几个数据用3.3的方法保存,其他不是很重要的数据则不用

3.5 尽量将所有的关系型数据放到3.1的main.db数据库中,保证该数据库不会太大(如果真的太大,你该考虑用mysql之类的高级数据库了,任何东西都有使用场景的),该数据库的所有操作都放到ui线程中,该数据库支持各种级联查询,外键等。

以上是我的一些想法,不对的地方恳请指教!


4.sqlite的一些基本工具推荐

管理工具:Navicat for Sqlite,这是我用过最好的管理工具,比网上推荐其他工具都好,可以去 下载吧 下载

命令行工具:这个没的说,直接用sqlite官网的工具

5.关于ORM

现在看到网上有很多sqlite的ORM工具,我真怀疑这个工具的合理性,sqlite本身是在一些简单场景使用的,就我目前所知,不管是.net,java,android,qt,提供的接口已经够用了,只要再根据业务稍微封装下就好了,完全没必要再搞个反射的ORM框架,当然,这些都是我个人意见。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读