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

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

概述- 移植安装 1. 下载源码包 sqlite官网  http://www.sqlite.org/ 下载: http://www.sqlite.org/sqlite-autoconf-3070500.tar.gz 2. 解压 # tar -zxvf sqlite-autoconf-3070500.tar.gz 3. 配置 # cd sqlite-autoconf-3070500 # ./config - 移植安装
1. 下载源码包 sqlite官网 http://www.sqlite.org/ 下载: http://www.sqlite.org/sqlite-autoconf-3070500.tar.gz
2. 解压 # 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/ 特点:功能强大 总结

以上是内存溢出为你收集整理的sqlite3 编译安装及快速入门 [2013-11-30更新]全部内容,希望文章能够帮你解决sqlite3 编译安装及快速入门 [2013-11-30更新]所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1173264.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存