SQLite 是一种流行的关系数据库管理系统,它轻量且强大。在 SyberOS 中可以用过 QSqlDatabase 类使用
SQLite 数据库,SyberOS 还提供加密的 SQLite 数据库。
1、打开数据库:
CConfig
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "test");
db.setDatabaseName("/home/user/test.db");
if(db.open()){
...
}
2、创建表:
QSqlQuery query(db);
bool result = query.exec(QString("CREATE TABLE 'test' \
('id' INTEGER PRIMARY KEY NOT NULL, 'name' VARCHAR2(100), 'age' INTEGER)"));
if(result){
...
}
3、向表中插入记录:
QSqlQuery query(db);
query.prepare("INSERT INTO test (name, age) VALUES (:name, :age)");
query.bindValue(":name", "Zhang Huanlin");
query.bindValue(":age", 35);
bool = result = query.exec();
if(result){
...
}
4、查询表中记录:
QSqlQuery query(db);
bool result = query.exec(QString("SELECT * FROM 'test'"));
if(result){
while(query.next()){
query.value("name").toString();
query.value("age").toInt();
...
}
}
5、更新表中的记录:
QSqlQuery query(db);
query.prepare("UPDATE test SET name = ?, age = ? WHERE id = ?");
query.addBindValue("Shou Xiaoyun");
query.addBindValue("24");
query.addBindValue(1);
bool = result = query.exec();
if(result){
...
}
6、删除表中的记录:
QSqlQuery query(db);
bool result = query.exec("DELETE FROM 'test' WHERE id = '1'");
if(result){
...
}
7、删除表:
QSqlQuery query(db);
bool result = query.exec("DROP TABLE test");
if(result){
...
}
8、删除数据库链接:
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "test");
QSqlQuery query("SELECT * FROM test", db);
}
// Both "db" and "query" are destroyed because they are out of scope
QSqlDatabase::removeDatabase("test");
其用法和非加密的数据库基本一致,区别在于:
1、创建数据对象时数据库引擎由 QSQLITE 变更为 QSQLCIPHER
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLCIPHER", "test");;
2、创建表必须设置密钥
QSqlQuery query(db);
query.exec("PRAGMA key='test123'");
query.exec("PRAGMA kdf_iter = '1000'");
设置密钥以及演绎迭代次数,演绎迭代次数默认值 64000,迭代强度和消耗时间成正比,所以应用程序可以
根据自己对加密强度和时间的要求来衡量。
设置迭代强度为 1000 时,大概多消耗 0.2 秒。
CConfig 类提供了关于第三方应用数据中心的查询、设置、删除接口。
使用方式如下:
#include <cconfig.h>
CConfig config;
1、 判定是否包含指定 key 的数据的接口:bool contains(const QString & key)
config.contains("autoPowerOn");
2、 设定指定 key 数据 value 的接口:void setValue(const QString & key, const QVariant & value)
config.setValue("autoPowerOn", true);
3、 读取指定 key 数据 value 的接口:QVariant value(const QString & key)
config.value("autoPowerOn").toBool();
4、 删除指定 key 数据的接口 void remove(const QString & key)
config.remove("autoPoweOn");
5、 获取最近config设置或读取的状态 CConfig::Status CConfig::status()
config.status();