为SQLite数据库添加加密功能
http://blog.csdn.net/leadworld/archive/2007/01/20/1488539.aspx
SQLite是一个很好用的嵌入式数据库。可惜美中不足的是SQLite的免费版本不具备加密功能。曾经在网上看到一个用WinCrypt实现加密功能的版本,但我不喜欢太依赖于Windows平台。这几日有时间,自己就用XXTEA算法在 SQLite3.3.7版本的基础上实现了加密功能。选择XXTEA主要是因为这个算法速度很快,对性能造成的影响相对较小。顺便修改了网上流传的XXTEA代码的一处内存越界的BUG。
用SQLite的一般是单机版软件比较多,有加密需求的一定不少,所以现在放出源代码与大家分享。代码的工程文件是用VC2005,如果用其它编译器,编译的时候不要忘记加上SQLITE_HAS_CODEC宏。代码只是粗略测试过,不保证100%无BUG和逻辑错误。
相关文档:
SQLite和其他大部分现代SQL数据库在基本设计目标上是不同的,它的目标是简单。SQLite遵循这一目标,即使这样偶尔会导致某些特性实现的低效化。下面列举了SQLite的一些缺陷:
SQL-92特性方面
正如前面提到的,SQLite不支持SQL-92的在很多企业数据库系统中可用的一些特性。
如:
外键约束(可解析的,但非强制)
很多ALT ......
主要通过pragma指令来实现。
比如: 空间释放、磁盘同步、Cache大小等。
不要打开。前文提高了,Vacuum的效率非常低!
PRAGMA auto_vacuum;
PRAGMA auto_vacuum = 0 | 1;
查询或设置数据库的auto-vacuum标记。
正常情况下,当提交一个从数据库中删除数据的事务时,数据库文件不改变大小。未使用的文件页被标记并在以 ......
SQLite不仅可以把数据库 放在硬盘上,还可以放在内存中(sqlite3_open(":memory:", &db)),经测试,同样条件下数据库放在内存中比放在硬盘上插入记录速度快差不多3倍。但数据库放在内存中时有如下缺陷:
1、断电或程序崩溃后数据库就会消失,你需要定期Attach到硬盘上备份;
2、在内存中的数据库不能被别的进程 ......
http://www.umgr.com/blog/PostView.aspx?bpId=36294
1. 执行sql语句
int sqlite3_exec(sqlite3*, const char *sql, sqlite3_callbacksql 语法
, void *, char **errmsg );
这就是执行一条 sql 语句的函数。
第1个参数不再说了,是前面open函数得到的指针。说了是关键数据结构。
第2个参数const char ......