Sqlite简介

sqlite是一个开源的嵌入式文件数据库,sqlite以动态链接库的方式供应用程序调用,所有的数据库对象都存储在同一个文件中。 sqlite动态库非常小,最新的3.8.11版本也只有500k左右。sqlite虽然小,但功能并不弱,它支持sql-92标准中大部分SQL规范, 支持表,索引,视图,触发器等对象,同时它还支持事务,满足ACID特性,因此非常适合嵌入式设备存储数据,尤其是手机,君不见微信,支付宝其实都在用哦。鉴于sqlite在嵌入式 领域非常流行,本人最近也在学习这个数据库,后面在学习的过程中,会整理些笔记,希望对大家有帮助。

下载源代码

在sqlite官网上http://www.sqlite.com/download.html下载最新的源代码,目前最新的版本是3.8.11。sqlite的源码包有两类,一类是sqlite-amalgamation-3081101.zip,这个包里面的 的源码只有一个源码文件sqlite3.c,包含了sqlite各个模块的所有代码;另外一类是sqlite-src-3081101.zip,这个包按sqlite模块拆分成了很多小文件。如果你想学习源代码,建议使用sqlite-src-3081101.zip,而如果用来熟悉sqlite功能,则建议使用sqlite-amalgamation-3081101.zip,因为就一个文件,方便将代码整合到自己的工程。下文,都假设采用只有一个文件的包。

编译&安装

拿到源码后,我们看到除了sqlite3.c源文件,还有shell.c文件。因为sqlite3.c只是一个动态库的源文件,因此通过整合shell.c可以生成sqlite执行码,简单来说就是sqlite3的客户端。

1)  编译命令行管理工具

gcc shell.c sqlite3.c -lpthread -ldl -o sqlite3

2)  编译动态链接库

gcc sqlite3.c -lpthread -ldl -fPIC -shared -o libsqlite3.so

备注:

-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的,动态载入时是通过代码拷贝的方式来满足不同进程的需要, 这样,N个进程就就需要N个动态库的拷贝,不能达到真正代码段共享的目的。

-shared:表示生成一个共享目标文件,即我们所说的动态链接库。它可以和其他目标文件连接产生可执行文件。

-lpthread系统库用于支持线程操作。

-dl系统库用于支持动态装载。

3)  编译静态库

gcc -c sqlite3.c -lpthread -ldl -o sqlite3.o

ar -r libsqlite3.a sqlite3.o

将列出的各个目标文件一起打包成一个静态库libsqlite3.a

sqlite3基本操作

经过第一步和第二步,我们已经有了动态库和可执行码,这一节主要讲讲sqlite客户端的基本操作。由于sqlite支持sql-92标准,因此,在sqlite中使用sql语句与其他关系型数据库并没有太多差别。

1)  创建名为test.db的数据库

sqlite3  test.db

2)  创建表t,并添加索引idx_c1

create table t1(id int primary key,  c1 varchar(100));

create index idx_c1 on t1(c1);

3)  创建视图

create view view_t1 as select * from t1;

4)  元数据查询命令

a)  .databaes  显示数据库对象

b)  .tables   显示表对象

c)  .schema  显示表对象创建语句

d)  .indices  显示索引对象

5)  sqlite_master元数据表

sqlite中所有数据都存储在一个db文件中,其中sqlite_master用于存储元数据信息。第4节讲到的命令输出的数据,实质都是来源于sqlite_master表。Sqlite_master表结构如下

type

name

tbl_name

rootpage

sql

对象类型

对象名

表名

对象B树存储的根页

创建对象语句

比如,查询当前数据库的所有对象

6) .show 显示格式

默认查询输出结果可能不太容易看,可以通过设置以下参数来调整输出。.show命令显示了当前各种输出参数的设置,比如我们输出结果时,需要输出列名,可以使用.headers on即可。其他参数,大家可以逐个试试。

sqlite> .show

echo: off

explain: off

headers: on

mode: column

nullvalue: ""

output: stdout

separator: "|"

width:

7)  导入&导出

sqlite备份恢复相当容易,直接拷贝db文件就完事了。同样sqlite也支持导入导出功能,相对于拷贝物理文件方式,导出的对象更灵活,可以只导出数据库中的指定对象,另外导出文件存储的是SQL语句,物理文件存储的是二进制数据。

a) 导出

.dump  默认导出数据库所有对象到屏幕

b) 导出 t1和t2表到文件,需要设置.output参数

.output filename

.dump  t1 t2

.output stdout

c) 导入

.read  filename

Sqlite学习笔记(一)&&编译安装的更多相关文章

  1. sqlite学习笔记7:C语言中使用sqlite之打开数据库

    数据库的基本内容前面都已经说得差点儿相同了.接下看看如何在C语言中使用sqlite. 一 接口 sqlite3_open(const char *filename, sqlite3 **ppDb) 打 ...

  2. (转)redis 学习笔记(1)-编译、启动、停止

    redis 学习笔记(1)-编译.启动.停止   一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先 ...

  3. SQLite 学习笔记

    SQLite 学习笔记. 一.SQLite 安装    访问http://www.sqlite.org/download.html下载对应的文件.    1.在 Windows 上安装 SQLite. ...

  4. openresty 学习笔记一:环境安装

    openresty 学习笔记一:环境安装 openresty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭 ...

  5. SQLite学习笔记(七)&&事务处理

    说到事务一定会提到ACID,所谓事务的原子性,一致性,隔离性和持久性.对于一个数据库而言,通常通过并发控制和故障恢复手段来保证事务在正常和异常情况下的ACID特性.sqlite也不例外,虽然简单,依然 ...

  6. Sqlite学习笔记(四)&&SQLite-WAL原理

    Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...

  7. Sqlite学习笔记(四)&&SQLite-WAL原理(转)

    Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...

  8. PHP学习笔记----IIS7下安装配置php环境

    原文:PHP学习笔记----IIS7下安装配置php环境 Php如何安装 Php版本的选择 Php在windows下的(php5.4.7)有两种版本: VC9 x86 Non Thread Safe ...

  9. Python3学习笔记01-环境安装和运行环境

    最近在学习Python3,想写一些自己的学习笔记.方便自己以后看,主要学习的资料来自菜鸟教程的Python3教程和廖雪峰官方网站的Python教程. 1.下载 1)打开https://www.pyth ...

随机推荐

  1. C# redis使用之ServiceStack

    需要注意的是:ServiceStack.Redis 中GetClient()方法,只能拿到Master redis中获取连接,而拿不到slave 的readonly连接.这样 slave起到了冗余备份 ...

  2. ASP.NET访问Excel 失败的解决方法(错误号:80070005,8000401a)

    用asp.net把值写入Excel在本地测试通过,然后提交服务器后老是写入不成功 并提示错误: Retrieving the COM class factory for component with ...

  3. [moka同学笔记]Yii下国家省市三级联动

    第一次做省市三级联动时候遇到了坑,感觉还是自己太菜.头疼了很久研究了很久,最后终于发现了问题.大致总结一下思路 在控制器中实例化model,然后在视图中渲染所有国家,当选取国家时候,ajax通过 id ...

  4. python学习笔记3(元组、字典)

    Python中有三种内置的数据类型.dictionary(字典).List(列表)和tuple(元组). 元组(tuple) 只读列表(列表的值可以修改,元组的不可以) 元组与列表类似,不同之处在于元 ...

  5. CI框架源码阅读笔记5 基准测试 BenchMark.php

    上一篇博客(CI框架源码阅读笔记4 引导文件CodeIgniter.php)中,我们已经看到:CI中核心流程的核心功能都是由不同的组件来完成的.这些组件类似于一个一个单独的模块,不同的模块完成不同的功 ...

  6. easyui datagrid toolbar 添加搜索框

    最近用到了就研究了下,效果  把列名稍加转换放入menubtton,对于单项搜索来说还是非常方便的 var fields =  $('#tt').datagrid('getColumnFields') ...

  7. netmiko初窥

    paramiko 和 pexpect在笔记里被跳过 因为,他们都可以被netmiko所取代,不想在他们身上浪费太多时间 补一个地方就是,如果用paramiko遇到了connection莫名自己关闭的情 ...

  8. Subway Icon Set – 306个像素完美的特制图标

    这个图标集是306个优化的像素完美,精雕细琢的图标.为这些设备进行了优化:iOS.Windows Phone.Windows 8 and BlackBerry 10,提供 PNG, SVG, XALM ...

  9. css通用小笔记03——浏览器窗口变小 div错位的问题

    我最近写网页的时候,经常碰到一个普遍的问题,经过我的查阅和尝试,终于解决了这一问题,这里有两种方法提供给大家,如果博友还有更好的方法,欢迎补充. 一.使用min-width属性: 我们先看看下面这段代 ...

  10. [deviceone开发]-毛玻璃效果示例

    一.简介 do_Bitmap组件可以把图片加载为内存里的Bitmap对象,能够对这个对象做各种图形化处理.目前只有3种处理,圆角,毛玻璃,灰度.以后会添加更多. 二.效果图 三.相关下载 https: ...