sqlite编程心得

原创 2015年11月19日 08:35:58

1. 应用场景


SQLite(sqlite3)数据库是个文件,又有数据库操作的接口,所以某些场景用起来特别方便。
就我的使用感受, sqlite3特别适合应用于单进程来操作数据,缓存中间数据,并且数据库大小有上限,建议1G之内。

在内部,SQLite由以下几个组件组成:内核、SQL编译器、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得更加方便。所有SQL语句都被编译成易读的、可以在SQLite虚拟机中执行的程序集。SQLite支持大小高达2 TB的数据库,每个数据库完全存储在单个磁盘文件中。这些磁盘文件可以在不同字节顺序的计算机之间移动。这些数据以B+树(B+tree)数据结构的形式存储在磁盘上。SQLite根据该文件系统获得其数据库权限。

相关文档详见http://www.sqlite.org/

2. 操作


例如centos 6.3上创建数据库test.db,里面有一个表tb_report。
CREATE TABLE tb_report (
 id INTEGER PRIMARY KEY AUTOINCREMENT,
 time TIMESTAMP NOT NULL DEFAULT '1972-01-01 00:00:00',
 user_id INTEGER NOT NULL,
 total_volume INTEGER NOT NULL DEFAULT 0,
 creationdate TIMESTAMP default CURRENT_TIMESTAMP
);
CREATE INDEX idx_report_user_id ON tb_report(user_id);

自增ID
INTEGER是64位,所以是够用的。
自增id定义为“PRIMARY KEY AUTOINCREMENT",虽然定义为"PRIMARY KEY"也可以自增,但是当"delete from tb_report"操作之后,又开始从1自增了。

INSERT
对于自增id插入NULL。
insert into tb_report (id, time, user_id , total_volume ) Values(NULL, '2015-11-18 09:17:18', 10001, 389836235);

DELETE
delete from tb_report;
sqlite没有truncate table命令,"delete from tb_report;"不加where, 相当于 truncate table. 
delete操作不会使数据库文件减少,而是标记一下,被新插入的数据使用,想减少数据库大小,需要做数据库整理。


3. 限制


http://www.sqlite.org/limits.html
sqlite3有默认限制SQLITE_MAX_SQL_LENGTH=1000000, SQLITE_MAX_COMPOUND_SELECT=500.
所以当在一个insert里面插入多个value时候,不要超过这个限制,不然会报错。
若你想修改这些限制,需要自己编译安装。

4. 数据库整理


VACUUM 命令通过复制主数据库中的内容到一个临时数据库文件,然后清空主数据库,并从副本中重新载入原始的数据库文件。这消除了空闲页,把表中的数据排列为连续的,另外会清理数据库文件结构。
下面是在命令提示符中对整个数据库发出 VACUUM 命令的语法:
$sqlite3 test.db "VACUUM;"
您也可以在 SQLite 提示符中运行 VACUUM,如下所示:
sqlite> VACUUM;
您也可以在特定的表上运行 VACUUM,如下所示:
sqlite> VACUUM tb_report;

5. 数据库修复


若数据库文件遭到损坏,client使用会提示:sqlite3 disk image malformat
修复方式是将原来的数据库导出为sql语句,创建新的数据库导入sql。
$sqlite3 test.db
sqlite>.output test.sql
sqlite>.dump
sqlite>.quit
$mv test.db test.db.bak
$sqlite3 test.db
sqlite>.read test.sql
sqlite>.quit



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

基于SQLITE数据库的C语言编程

出自这里 一 SQLITE 操作入门 sqlite 提供的是一些 C 函数接口,你可以用这些函数操作数据库。通过使用这些接口,传递一些标准 sql 语句(以 char * 类型)给 sqlit...

sqlite3编程 & 示例

0. 引言 我们这篇文章主要讲述了如何在C/C++语言中调用 sqlite 的函数接口来实现对数据库的管理,包括创建数据库、创建表格、插入数据、查询数据、删除数据等。 1. 说明这里我们假设你已经编译...

Windows中SQLite的编译及编程

网上很多大牛其实都写了,这里只是为了记录自己的学习情况,顺便学习一下编译生成静态链接库,进入正题 开发环境:Windows 10+VS2013。 开发语言:C/C++。 首先,要在C程序中使用S...

SQLite数据库总结

SQLite数据库 轻量级关系型数据库 创建数据库需要使用的api:SQLiteOpenHelper public class MyOpenHelper extends SQLite...
  • chi1002
  • chi1002
  • 2016年04月21日 11:21
  • 140

android操作sqlite数据库及心得

写这篇文章主要是网上的对sqlite的操作太多且太杂,很多时候都不能很好的运用到自己的项目中,结构不清晰,我自己写了一篇适合刚刚接触的人看的操作方法。 近来用android时要将...

sqlite3学习体会

在网上闲逛,看到sqlite3这个数据库,想起之前搞安卓开发的时候见过这个词 了解了下,不错,正适合当前的一些需求 零散记一点: 一开始的时候发现插入速度很慢,查了下,原来要使用事务,先...

个人对SQLite使用的一些体会

最近都在使用SQLite数据库,老实说这才是我使用的第三款数据库而已。使用它原因就应为它够轻量,而且性能挺不错。但使用久了也发现了一些问题。偶尔也会有怨言,但也不会骂SQLite是个破东西之类的,原因...
  • form88
  • form88
  • 2015年06月17日 17:29
  • 554

Android编程心得-在Assets文件夹中放入.sql文件实现创建SQlite表的操作

当我们在使用SQLiteOpenHelper时,经常使用db.execSQL(String sql)方法写入对应语句实现创建表的操作,这样的确可以实现业务逻辑。与此同时还有一种更灵活的方法,从asse...

SQLite的一点学习心得

1.主键的设计原则: (1)主键应当对用户是没有意义的 (2)永远不要更新主键 (3)主键不应包含动态变化的数据 (4)主键应当由计算机自动生成 2. 创建表 CREATE TABLE if ...
  • ft6206
  • ft6206
  • 2016年10月22日 20:36
  • 120

swift sqlite3 学习心得

iOS开发中,需要使用sqlite,所以试图学习,但学习过程中似乎是遇到了一点困难: 在bing.com搜 “swift sqlite”,得到的多是基于某个封装过sqlite的framework(如f...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sqlite编程心得
举报原因:
原因补充:

(最多只允许输入30个字)