极力推荐一个数据库-sqlite

来源:互联网 发布:2d图形 旋转矩阵 编辑:程序博客网 时间:2024/04/29 16:37

有一天,我要做一个项目,拥有自己的文件格式,突然思考,如果自己写文件格式的话会花很大的一段时间,包括数据的读写、数据的处理(排序,筛选等),这样的话,能不能借助数据库呢?考虑了手头上的几个数据库都放弃了,即使是小型化的access 也要驱动才能运作。问了下同事,结果他推荐我使用sqlite,哎~~孤陋寡闻了,居然有这样一个数据库。跑到官方网站上看到了简介,发现正是自己想要的东西,便连忙下载下来试用。

根据官方的说明,sqlite有以下特色:零配置,不象其他数据库那样需要配置。无服务器,不是CS架构的数据库。单数据库文件,数据都保存在一个文件里面。跨平台的数据库格式,无论是大小尾还是32位,64位,都可以移植。紧凑,编译后整个sqlite库只有200KB大小。自显类型可变长度记录容读的代码 SQL编译器开放的授权 SQL扩展

可以应用在以下场合:应用程序的文件格式嵌入式设备网站替代C的文件操作函数临时数据库数据分析工具企业数据库的演示和测试 SQL语言扩展实验

 不适合以下场合:  C/S架构  高容量的卷  超大的数据库  高并发的场合

  SQLITE已经被多家厂商所使用,例如:Adobe,Microsoft,Apple等等

  嵌入式的linux,win ce,vxworks,手机使用的数据库大部分都是sqlite,可以说在嵌入式平台上已经称霸一方了。   我还在sony的psp见到了sqlite。另外,其他语言的驱动都已经出现,例如java,.net,python,php,perl等   sqlite本身内置支持TCL!

  从sqlite的体系上看,麻雀虽小,五脏具全,SQL分析器,编译器,虚拟机,页管理器,OS抽象层都有。而且代码包含   大量的注释以及测试代码,非常值得学习。

其实SQLITE的性能完美超越了Access一大截了,在打开事务处理的情况下,不少操作的性能超越了 MY SQL,最重要的是,它能够直接编译到程序里面,或者编译成一个DLL,使用起来非常方便。那么好的东西,赶快到www.sqlite.org收藏吧

附例子代码:

#include <stdio.h>#include "../sqlite3/sqlite3.h"#pragma comment(lib,"../sqlite3/sqlite3")static int callback(void *NotUsed, int argc, char **argv, char **azColName){int i;for(i=0; i<argc; i++){printf("%s = %s/n", azColName[i], argv[i] ? argv[i] : "NULL");}printf("/n");return 0;}int main(int argc, char* argv[]){sqlite3 *db;char *zErrMsg = 0;int rc;//打开数据库,如果数据库不存在则创建rc = sqlite3_open("season.db", &db);if( rc ){fprintf(stderr, "打开数据库失败: %s/n", sqlite3_errmsg(db));sqlite3_close(db);return 1;}//创建一个friends表,包含下面的键/*id--firends 编号主键,自动增加name--名字sex--性别birthday--生日note--备注*/rc = sqlite3_exec(db, "create table friends(id integer not NULL PRIMARY KEY AUTOINCREMENT, name varchar(20) ,sex varchar(5),birthday datetime,note varchar(256))", callback, 0, &zErrMsg);if( rc!=SQLITE_OK ){fprintf(stderr, "SQL语句执行错误: %s/n", zErrMsg);sqlite3_free(zErrMsg);}//插入三条数据rc = sqlite3_exec(db, "insert into friends(name,sex,birthday,note) values('summer','boy','1984-7-19','安静的夏天,总是那么的美丽!')", callback, 0, &zErrMsg);if( rc!=SQLITE_OK ){fprintf(stderr, "SQL语句执行错误: %s/n", zErrMsg);sqlite3_free(zErrMsg);}rc = sqlite3_exec(db, "insert into friends(name,sex,birthday,note) values('xixi','girl','1988-4-47','a cute girl!')", callback, 0, &zErrMsg);if( rc!=SQLITE_OK ){fprintf(stderr, "SQL语句执行错误: %s/n", zErrMsg);sqlite3_free(zErrMsg);}rc = sqlite3_exec(db, "insert into friends(name,sex,birthday,note) values('jing','girl','1987-1-1','no information..')", callback, 0, &zErrMsg);if( rc!=SQLITE_OK ){fprintf(stderr, "SQL语句执行错误: %s/n", zErrMsg);sqlite3_free(zErrMsg);}//选出数据rc = sqlite3_exec(db, "select * from friends", callback, 0, &zErrMsg);if( rc!=SQLITE_OK ){fprintf(stderr, "SQL语句执行错误: %s/n", zErrMsg);sqlite3_free(zErrMsg);}//关闭数据库sqlite3_close(db);return 0;}