嵌入式数据库
首选SQLite
获得过 Google-O'Reilly Open Source Awards 2005年大奖,Firefox, SecondLife 采用。
特性
基本SQL ,包括事务
全文检索
能够整库强加密,或者字段加密
占用内存少、速度快满足大部分场合
详细 features见这儿 。
使用
直接使用其接口 不太方便,建议稍做封装
1 基本操作
create
sqlite3x::sqlite3_connection con("path/to/dbfile");
con.executenonquery("CREATE TABLE IF NOT EXISTS user(name TEXT PRIMARY KEY, passwd TEXT)");
select
sqlite3x::sqlite3_command cmd(con, "SELECT name, passwd FROM user ORDER BY time DESC");
sqlite3x::sqlite3_reader reader = cmd.executereader();
while(reader.read()) {
std::string name = reader.getstring(0);
std::string passwd = reader.getstring(1);
}
update
sqlite3x::sqlite3_command cmd(con, "REPLACE INTO user(passwd) values (?)");
cmd.bind(1, "new passwd");
cmd.executenonquery();
2 全文检索
WHERE field LIKE "%dog%"
3 加密
编译 sqlite3 时定义 SQLITE_HAS_CODEC 宏,并实现
int sqlite3_key(sqlite3 *db, const void *zKey, int nKey);
int sqlite3_rekey(sqlite3 *db, const void *zKey, int nKey);
等函数。
4 注意
其接口分utf8, unicode两种,接口不同数据库文件内码也会不同。
其命令行工具是排错的好帮手