现在的位置: 首页 > 综合 > 正文

极力推荐一个数据库-sqlite

2013年08月01日 ⁄ 综合 ⁄ 共 2479字 ⁄ 字号 评论关闭

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

}

抱歉!评论已关闭.