资源描述:
《开源sql数据库sqlite3的移植和使用心得》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、http://blog.csdn.net/ExclusivePig/archive/2009/09/18/4566255.aspx介绍在近几个月以来,你也许听过一个新的PHP数据库扩展类库SQLite.好多人认为SQLite是自有面包片以来最好的东东,其提供了一个快速的访问平面文件数据库的接口.并且提供了访问大容量数据库的简洁的手段,但是并没有所意想的功能或者速度上的损失.在本文中,我们将探讨这个新的激动人心的扩展库,并且希望以此来验证其传说中的优势和好处.啥是SQLite?SQLite是实现了SQL92标准的一个大子集的嵌入式数据库.
2、其以在一个库中组合了数据库引擎和接口,能将所有数据存储于单个文件中而著名.我觉得SQLite的功能一定程度上居于MySQL和PostgreSQL之间.尽管如此,在性能上面,SQLite常常快2-3倍(甚至更多).这利益于其高度调整了的内部架构,因为它除去了服务器端到客户端和客户端到服务器端的通信.所有这些都集在一个包中,也仅仅比MySQL的客户端的库稍微大一点.而令人印象深刻的特点是你可将你的整个数据库系统放在其中.利用非常高效的内存组织,SQLite只需在很小的内存中维护其很小的尺寸,远远比其它任何数据库系统都小.这些特点使得其成为在
3、需要高效地应用数据库的任务中一个非常方便的工具.它对我有啥用?除了速度和效率,SQLite还有其它好多的优势使得其能成为许多任务中一个理想的解决方案.因为SQLite的数据库都是简单文件,因此无须一个管理队伍花时间来构造复杂的权限结构来保护用户的数据库.因为权限通过文件系统自动进行.这也同时意味着(数据库空间的大小只与环境有关,与本身无关)无段特殊的规则来了解用户磁盘空间.用户可以从创建他们想要的任意多的数据库和对其对这些数据库的绝对控制权而得到好处.数据库就是一个文件的事实使用SQLite可以轻易地在服务器间移动.SQLite也除去了
4、需要大量内存和其它系统资源的伺候进程.即使当数据库在大量地使用时也是如此.----------------------------惯例,以上为转载-------------------------------------开源的东西就是强大,可惜,都是老外的,我们正好相反,越好的东西(相对好些,其实问题一堆)越是藏着,掖着,然后自以为是的炫耀,收取版权费。发点牢骚!同样源码全是C写的,移植非常方便,对于常见的平台,Windows,Unix,Mac,Linux(类Unix),OS2等,只要把相应的宏打开,直接编译即可。但是我们的联芯平台用的
5、是ThreadX,官方并没有现成的,因此要自己移植。这里说下SQlite3的源码种类,有2大类,一类是amalgamation版本,这个版本只有一个.c,是所有源码的集合,我用的就是这个版本,省去了自己写makefile,移植更容易。另一类则是按目录分的源码包。下面说下SQlite3的移植:原则上SQlite3只适用于多线程的平台,目前我还不清楚怎么往多任务但是却无线程概念的系统上移植。SQlite3默认用的是pthread库,因此对于有了pthread库的平台,在线程部分不需修改,否则,要么往自己的平台上移植pthread,要么就是把
6、SQlite3中线程接口改成自己平台适用的,看自己需求了。另一个要一直的则是文件系统接口,原则上,完全可以用标准C的fopen,fclose..函数集,但是那样的话,就不支持SQlite3的高级特性,比如数据库加锁啊,多线程的同步访问啊,但是对于嵌入式设备,这些功能往往也需要拥有,因此只要将文件系统改成标准C的接口,或者自己平台适用的接口。因为我联芯的手机平台已经有了pthread库,因此,我只移植了文件系统部分(小小得意一把,其实本来移植工作是另外一位同事的,但因为我需求比较早,所以我花了一天时间移植了一个版本,而那个同事花了整整一个
7、礼拜,他把线程都改了,佩服他的耐心啊!)文件系统的移植方法简单说下:顺着sqlite3_os_init(void)修改就行了,将所有涉及文件操作的改下,没什么难度的,不过超过500行。接着说下适用方法,和XMLParserexpat一样,也是基于回调的机制:首先打开或者创建一个数据库:sqlite3*db;sqlite3_open(DATABASE_NAME,&db);函数成功返回0,如果数据库不存在,则是创建数据库,反之,则是打开和内存的申请和释放一样,open后,一定要有成对的closesqlite3_close(db);函数成功返
8、回0,下面是常见的错误返回:#defineSQLITE_OK0/*Successfulresult*//*beginning-of-error-codes*/#defineSQLITE_ERROR1/*SQ