有一天,我要做一个项目,拥有自己的文件格式,突然思考,如果自己写文件格式的话会花很大的一段时间,包括数据的读写、数据的处理(排序,筛选等),这样的话,能不能借助数据库呢?考虑了手头上的几个数据库都放弃了,即使是小型化的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;
}