SQLite数据库使用详解程序

上传人:wuxin****2020 文档编号:107935981 上传时间:2022-06-15 格式:DOCX 页数:7 大小:19.95KB
收藏 版权申诉 举报 下载
SQLite数据库使用详解程序_第1页
第1页 / 共7页
SQLite数据库使用详解程序_第2页
第2页 / 共7页
SQLite数据库使用详解程序_第3页
第3页 / 共7页
资源描述:

《SQLite数据库使用详解程序》由会员分享,可在线阅读,更多相关《SQLite数据库使用详解程序(7页珍藏版)》请在装配图网上搜索。

1、1. SQLite数据库的优点:1.1 轻量级SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,使用SQLite一般只需要带上它的一个动态库。以版本3.6.11为例,Windows下487KB、Linux下347KB。1.2 绿色软件它的核心引擎本身不依赖第三方的软件 1.3 单一文件就是数据库中所有的信息(比如表、视图、触发器、等)都包含在一个文件内。这个文件可以copy到其它目录或其它机器上,也照用不误。CSV也是单一文件格式。它本身就是用来表示二维的数据信息的。一个CSV文件可以理解为数据库的一张表。CSV的缺点主要在于:不便于存储非文本的数据信息(比如BLOB类型的信息

2、);如果需要同时存储多张表的信息,就需要对应有多个CSV文件(文件一多,就嫌麻烦)。1.4 跨平台/可移植性 除了主流操作系统,SQLite还支持了很多其他的操作系统。如对很多嵌入式系统(比如Android、Windows Mobile、Symbin、Palm、VxWorks等)的支持。Access数据库最主要的缺点就是不能跨平台。另外还有几个小缺点:文件大小有限制(2GB)、不支持内存数据库。1.5 内存数据库(in-memory database)如今内存越来越便宜,很多普通PC都开始以GB为单位来衡量内存(服务器就更甭提了)。这时候,SQLite的内存数据库特性就越发显得好用。SQLit

3、e的API不区分当前操作的数据库是在内存还是在文件(对于存储介质是透明的)。所以如果你觉得磁盘I/O有可能成为瓶颈的话,可以考虑切换 为内存方式。切换的时候,操作SQLite的代码基本不用大改,只要在开始时把文件Load到内存,结束时把内存的数据库Dump回文件就OK了。1.6 编程语言接口由于SQLite本身是C写的,它自带的API也是C接口的。2. SQLite数据库的缺点:2.1 并发访问的锁机制SQLite在并发(包括多进程和多线程)读写方面的性能不太理想。数据库可能会被写操作独占,从而导致其它读写操作短时间内阻塞。2.2 SQL标准支持不全在它的官方网站上,具体列举了不支持哪些SQL

4、92标准。2.3 网络文件系统(以下简称NFS)有时候需要访问其它机器上的SQLite数据库文件,就会把数据库文件放置到网络共享目录上。当SQLite文件放置于NFS时,在并发读写的情况下可能会出问题(比如数据损坏)。原因是由于某些NFS的文件锁实现上有Bug。3. 选择SQLite的原因。(1) 嵌入式设备资源有限,SQLite占用内存和CPU资源都比较少。(2) 源代码开源,且使用完全免费。(3) 相对于其他大型数据库来说移植相对比较方便。(4) 检索速度上,在小于十几兆或即使兆数据的检索速度上,SQLite的速度超过mySQL和Oracle等中型或大型数据库(当数据上G后,Oracle的

5、检索速度最快,SQLite最慢)。(5) 虽然SQLite不支持多用户多进程同时读写数据库,但是该缺陷在我们的嵌入式设备上很少会发生。4. 使用方法概述。4.1 配置SQLite在sqlite目录下进行如下配置:./configure -prefix=/QT/sqlite3 -disable-tcl -host=arm-none-linux-gnueabi4.2 编译make4.3 安装make install该命令将编译好的文件安装到sqlite-arm目录下,在sqlite-arm目录下会生成bin、lib、include目录,bin目录下是sqlite3可执行文件,lib目录下包含运行s

6、qlite3所依赖的库,另外在编译,另外在编译sqlite应用程序时,必须指明所依赖的头文件和库。4.4 去掉调试信息(可选)文件编译后会产生许多调试信息,下载到开发板将会占用较多存储器。我在编译后lib目录下文件大小达到2.2M,占用了不少Flash,为减小Flash占用去掉不必要的调试信息。在sqlite_arm目录下执行如下命令:arm-linux-strip bin/*arm-linux-strip lib/*去掉调试信息后文件大小减小许多。将sqlite_arm /bin目录下的文件sqlite3拷贝到根文件系统的bin目录下,并将sqlite_arm/lib目录下的文件拷贝到根文件

7、系统的lib目录下。4.5 测试root#sqlite3 test.dbEnter .help for instructionsEnter 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|aaa2|bbbsqlite.quitroot#5. 常用函数介绍:最新版本的SQLite 提供的C

8、语言接口的函数已有一百五十个但核心函数是下面介绍的几个, 利用这几个函数就可以实现有效的数据存储和管理。5.1 sqlite3_open()打开数据库函数原型:int sqlite3_open(const char *filename, /* Database filename (UTF- 8) */sqlite3 *ppDb /* OUT: sqlite db handle */);int sqlite3_open16(const void *filename, /* Database filename (UTF- 16) */sqlite3 *ppDb /* OUT: sqlite db

9、handle */);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 */);第一个函数是打开UTF- 8 格式编码的数据库; 第二个函数是打开UTF- 16 格式编码的数据库; 第三个函数在没有接收额外参数说明的情况下与第一个用法相同, 这两个额外的参数可以是下列的其中之一:

10、SQLITE OPEN READONLY, SQLITE OPEN READWRITE,SQLITE OPEN READWRITE/SQLITE OPEN CREATE。sqlite3_open ()打开指定的数据库, 数据库文件的路径和名称由flilename 参数确定。如果文件不存在, 就创建这个文件。文件打开或创建成功, 函数返回SQL ITE_OK, 同时通过ppDb 参数返回合法的数据库句柄, 否则函数返回相应的异常代码。5.2 sqlite3_close()关闭数据库函数原型: int sqlite3_close(sqlite3 *db);sqlite3_close ()关闭已经打

11、开的数据库。db 参数传递的是被关闭数据库的句柄。sqlite3_close ()和sqlite3_open ()是成对使用的, 值得注意的是, 当sqlite3_open ()打开数据库失败, ppDb 指针参数返回一个无效的数据库句柄时, 仍然需要调用sqlite3_close () , 有效地释放指针参数占用的资源。关闭已打开的数据库, 成功返回SQLITE?_OK, 失败返回SQLITE_ERROR, 如果数据库还没有完成操作, 将返回SQLITE_BUSY。5.3 sqlite3_exec()执行数据库函数原型:int sqlite3_exec(sqlite3*, /* An ope

12、n database */const char *sql, /* SQL to be evaluted */int (*callback)(void*,int,char*,char*), /* Callback function */void *, /* 1st argument to callback */char *errmsg /* Error msg written here */);这就是执行一条sql 语句的函数。第一个参数不再说了, 是前面open 函数得到的指针, 是关键数据结构。第二个参数const char *sql 是一条sql 语句, 以0 结尾。第三个参数是回调, 当

13、这条语句执行之后, SQLite3 会去调用你提供的这个函数。第四个参数void* 是你所提供的指针, 你可以传递任何一个指针参数到这里, 这个参数最终会传到回调函数里面, 如果不需要传递指针给回调函数,可以填NULL。第五个参数char * errmsg 是错误信息。注意是指针的指针。SQLite3 里面有很多固定的错误信息。执行sqlite3_exec之后, 执行失败时可以查阅这个指针( 直接printf(“%sn”,errmsg) 得到一串字符串信息, 这串信息告诉你错在什么地方。sqlite3_exec函数通过修改你传入的指针的指针, 把你提供的指针指向错误提示信息, 这样sqlite

14、3_exec 函数外面就可以通过这个char* 得到具体错误提示。说明: 通常, sqlite3_callback 和它后面的void * 这两个位置都可以填NULL。填NULL 表示你不需要回调。比如你做insert 操作,做delete 操作, 就没有必要使用回调。而当你做select 时, 就要使用回调, 因为SQLite3 把数据查出来, 得通过回调告诉你查出了什么数据。5.4 出错处理函数int sqlite3_errcode(sqlite3 *db);const char *sqlite3_errmsg(sqlite3*);const void *sqlite3_errmsg16(

15、sqlite3*);出错处理函数有上面的三个函数。第一个函数返回错误代码; 第二个函数获取最近一次操作错误信息, 对应的是UTF- 8 编码格式; 第三个函数获取最近一次操作错误信息, 对应的是UTF- 16 编码格式。5.5 编程实例:#include #include static int callback(void *NotUsed, int argc, char *argv, char *azColName)int i;for(i=0; iargc; i+)printf(%s = %s/n, azColNamei, argvi ? argvi : NULL);printf(/n);re

16、turn 0;int main(int argc, char *argv)sqlite3 *db;char *zErrMsg = 0;int rc;if( argc!=3 )fprintf(stderr, Usage: %s DATABASE SQL-STATEMENT/n, argv0);rc = sqlite3_open(argv1, &db);if( rc )fprintf(stderr, Cant open database: %s/n, sqlite3_errmsg(db);sqlite3_close(db);rc = sqlite3_exec(db, argv2, callback, 0, &zErrMsg);if( rc!=SQLITE_OK )fprintf(stderr, SQL error: %s/n, zErrMsg);sqlite3_close(db);return 0;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!