sqlite3 编译安装及快速入门 [2013-11-30更新]

前端之家收集整理的这篇文章主要介绍了sqlite3 编译安装及快速入门 [2013-11-30更新]前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
- 移植安装

1. 下载源码包
# tar -zxvf sqlite-autoconf-3070500.tar.gz

3. 配置
# cd sqlite-autoconf-3070500
# ./configure --host=arm-linux --prefix=/root/build_sqlite
(如果想生成x86可执行的版本,省去"--host=..."即可,其他步骤不变)

-------------------------------------------------------------

- 使能内存管理功能(即 int sqlite3_release_memory(int); 方法

打开Makefile文件,在 DEFS = ... 后面添加编译选项:-DsqlITE_ENABLE_MEMORY_MANAGEMENT
sqlite总是倾向于将数据缓存在内存中,以此减少IO操作的次数,对于传入sqlite API的指针变量,使用完后必须手动释放内存。

释放内存:
sqlite3_free(msg);
sqlite3_free_table(dataSet);

-------------------------------------------------------------

4. make & make install
成功后将在 /root/build_sqlite 目录下生成4个目录(bin、include、lib、share)

5. 下载
将 bin 下的文件下载到开发板的 /usr/bin 目录中
将 lib 下的所有文件下载到开发板的 /usr/lib 目录中
include目录下是sqlite的C语言API的头文件,编程时会用到

6. 测试
[rootMrFeng]#sqlite3 test.db (sqlite数据库一般以“db”作为扩展名,但不强制要求)
sqlite version 3.6.18
Enter ".help" for instructions
Enter sql statements terminated with a ";"
sqlite> create table film (number,name);
sqlite> insert into film values (1,'aaa');
sqlite> insert into film values (2,'bbb');
sqlite> select * from film;
1|aaa
2|bbb
sqlite>.quit
[rootMrFeng]#

7.test_sqlite.c

test_sqlite.c为官网上的测试程序,通过main函数传参,直接编译可用,其中 callback 函数定义了查询结果的显示方式。

执行结果如下:
[root@localhost ~]# ./test_sqlite test.db "select * from film"
number = 1
name = aaa

number = 2
name = bbb



- 基本操作

1) 创建数据库文件
>sqlite3 test.db
生成test.db,同时sqlite挂上这个数据库

2) 帮助
>.help

3) 可在命令行下直接输入sql语句创建表,用“;”结束,回车就可看到结果

4) 查看所有表
>.tables

5) 查看结构
>.schema 表名

6) 查看目前挂的数据库
>.database

7) 把查询输出文件
>.output filename
>查询语句;

查询结果用屏幕输出
>.output stdout

8) 把表结构输出,同时索引也会输出
>.dump 表名

9) 退出
>.exit 或者 .quit

10) 查看配置信息
>.show



- vacuum

当从sqlite删除数据后,未使用的磁盘空间被添加到一个内在的“空闲列表”
(“空闲列表”用于存储下次插入的数据)因此不向操作系统返回磁盘空间

以下2种方法可回收这部分磁盘空间:

1. 在创建数据库时将 auto-vacuum 设为1(默认为0)
缺点:会产生碎片
注意:auto-vacuum 的值只有在未建任何表的情况下才允许改变
auto-vacuum 选项在 sqlite 3.1 后才出现

2. 执行“vacuum”命令
缺点:比方法1耗时
注意:官方说法是“在Linux的环境下,大约0.5秒/M”
说明:
命令行操作:
sqlite3 *.db vacumm // 不打开数据库
vacuum; // 打开数据库
程序操作:sql = "vacuum" // 然后执行该语句



- 开发基础

1. sqlite不支持DataTime数据类型,可用TimeStamp类型替代。
2. 在sqlite命令行下执行 .header [on|off] 可显示或隐藏表头。
3. sqlite下的int类型支持 > 32bit 数值。
4. 自增字段:将主键设置为整型,插入数据时使用null替代。
5. 时间函数:datetime()、date()、time()。

获取数据库中所有表/索引的信息
>select * from sqlite_master;
* 当文件(与扩展名无关)为空白时同样能执行上述语句,且返回相同结构的表,但记录数为0
* 可以用来判断某个文件是否是sqlite数据库文件



- 数据库打开操作

sqlite API 中有多个方法可打开数据库包括

sqlITE_API int sqlite3_open(
const char *filename,/* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: sqlite db handle */
);

sqlITE_API int sqlite3_open16(
const void *filename,/* Database filename (UTF-16) */
sqlite3 **ppDb /* OUT: sqlite db handle */
);

sqlITE_API int sqlite3_open_v2(
const char *filename,/* Database filename (UTF-8) */
sqlite3 **ppDb,/* OUT: sqlite db handle */
int flags,/* Flags */
const char *zVfs /* Name of VFS module to use */
);

------------------------------------------------------------------------
其中,sqlite3_open()、sqlite3_open16()方法数据库文件不存在时依然返回true
因此,若需要判断数据库文件是否存在时应该选用sqlite3_open_v2()方法
------------------------------------------------------------------------

sqlite3_open_v2()中常用的flags包括
sqlITE_OPEN_READONLY // 只读,文件不存在时返回false
sqlITE_OPEN_READWRITE // 读写,文件不存在时返回false
sqlITE_OPEN_CREATE // 文件不存在时则创建

以下几种情况会导致sqlite3_open_v2()返回false:
1. 指定的文件不存在
2. 指定的文件为非sqlite数据库文件
3. 指定的文件被加密

* 注意:由于空白文件能成功打开,如需要判断数据库是否为空,则可参考下述方法
------------------------------------------------------------------------
QString sql = "select * from sqlite_master";
char **dataSet;
int nrow;
int ncolumn;
char *msg;
int ret;

std::string stdString = sql.toStdString();
const char *s = stdString.c_str();

// 若文件存在,则判断数据库中是否存在表/索引等
ret = sqlite3_get_table(db,s,&dataSet,&nrow,&ncolumn,&msg);

if (ret != sqlITE_OK)
{
qDebug() << "Msqlite3::open(): Database check error.";
return false;
}

if (nrow != 0)
{
qDebug() << "Msqlite3::open(): Database open success.";
isOpen = true;
return true;
}
else
{
qDebug() << "Msqlite3::open(): Database is empty.";
return false;
}
...
------------------------------------------------------------------------



- 导入导出数据(CSV格式)

# sqlite3-csvtest.db"select*fromdata_table"> data.csv
# sqlite3 test.db ".import data.csv data_table"



- 图形界面管理工具
1. sqlite Database Browser http://sqlitebrowser.sourceforge.net/ 特点:多平台支持(Windows/Linux/Mac OS) 2. sqlite Administrator (推荐) http://sqliteadmin.orbmu2k.de/ 特点:小巧(2MB+) 缺点:不支持中文路径 3. sqlite Expert - Personal Edition (推荐) http://www.sqliteexpert.com/ 特点:功能强大
原文链接:https://www.f2er.com/sqlite/200914.html

猜你在找的Sqlite相关文章