sqlite3 编译安装及快速入门 [2013-11-30更新]
发布时间:2020-12-12 20:09:39 所属栏目:百科 来源:网络整理
导读:- 移植安装 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 -
- 移植安装
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/ 特点:功能强大 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |