极力推荐一个数据库-sqlite
2008-06-12 20:40
309 查看
有一天,我要做一个项目,拥有自己的文件格式,突然思考,如果自己写文件格式的话会花很大的一段时间,包括数据的读写、数据的处理(排序,筛选等),这样的话,能不能借助数据库呢?考虑了手头上的几个数据库都放弃了,即使是小型化的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收藏吧
附例子代码:
根据官方的说明,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; }
相关文章推荐
- 极力推荐一个数据库-sqlite
- iOS 开发之封装一个 sqlite3 数据库
- [推荐]一个sqlite的图形管理工具
- SQLite怎么统计一个数据库中有多少张表,视图或者触发器 .
- nullnull极力推荐一个笑话精选的应用
- 用PHP写了一个SQLite的数据库驱动类,测试中....
- SQLite for uClinux(一个可以在嵌入式系统中使用的小型数据库)
- iOS 怎么将自己创建的一个对象存入数据库sqlite,例如:Person??
- 推荐一个好用的Sqlite图形化编辑软件
- 推荐一个免费的数据库建模工具-OpenSystemArchitect
- 利用反射实现对sqlite3数据库的crud(增删改查)操作的一个baseAndroidDao封装,安卓开发中
- SQLite怎么统计一个数据库中有多少张表,视图或者触发器
- SQLiteStudio优雅调试Android手机数据库Sqlite(推荐)
- 推荐一个好的数据库工具Embarcadero DBArtisan
- HTML5 本地数据库(SQLite) 示例 推荐
- 极力推荐一个笑话精选的应用
- 源码推荐(7.28):习惯了的Sqlite,自己动手造一个可以深度自定义的图片选择器
- [推荐]一个sqlite的图形管理工具
- [数据库测试]强烈推荐一个python ODBC数据源插件,可支持Oracle,Db2,Mysql,Sql-server以及各种数据库版本,附例子和测试程序
- 想在短时间内(两周)了解一下数据库,有哪位同学给推荐一个好点的教材?