前言
sqlite数据库是一个进程内的嵌入式数据库,可以无缝嵌入到的你软件里面 ,区别于mssql mysql等独立进程数据库,所以能用sqlite完成的尽量不要用其他数据库
优势
不需要配置编译即可使用
支持千万级别海量数据最好不要超过亿级
命令
支持标准sql 如insert delete update select drop等
安装
1首先把sqltecipher源码下载下来,然后编译出release 和debug 版本即可
2 复制sqlitecipher.dll 和sqlitecipherd.dll到你的qt安装目录下的plugins\sqldrivers即可
3 main函数 添加以下 代码 qDebug() << QSqlDatabase::drivers(); 如果出现sqlitecipher 字符说明驱动安装成功
创建数据库
sqlite studio创建一个db
加密
QSqlDatabase dbconn = QSqlDatabase::addDatabase("SQLITECIPHER");
//QSqlDatabase dbconn = QSqlDatabase::addDatabase("QSQLITE");
dbconn.setDatabaseName(QCoreApplication::applicationDirPath()+"/test.db");
dbconn.setPassword("root");
dbconn.setConnectOptions("QSQLITE_USE_CIPHER=aes256cbc; QSQLITE_ENABLE_REGEXP");
if (!dbconn.open()) {
qDebug() << "Can not open connection: " << dbconn.lastError().driverText();
return CONNECTION_FAILED;
}
测试加密是否成功
;打开studio创建student表
; 键入以下代码查询student表
QSqlDatabase dbconn = QSqlDatabase::addDatabase("SQLITECIPHER");
dbconn.setDatabaseName(DB_FILE_PATH);
dbconn.setPassword("root");
dbconn.setConnectOptions("QSQLITE_USE_CIPHER=sqlcipher; QSQLITE_ENABLE_REGEXP");
if ( !dbconn.open()){
qDebug() << "Can not open connection: " << dbconn.lastError().driverText();
return CONNECTION_FAILED;
}
QSqlQuery query;
query.exec("select * from student");
while(query.next()){
static int i=1;
int ele0=query.value(0).toInt();
QString ele1=query.value(1).toString();
qDebug()<<i++<<":"<<ele0<<"|"<<ele1;
}
dbconn.close();
;查询结果
;相关函数
//修改数据库密码
void updatePassword()
{
QSqlDatabase dbconn = QSqlDatabase::addDatabase("SQLITECIPHER");
dbconn.setDatabaseName(DB_FILE_PATH);
dbconn.setPassword("root");
dbconn.setConnectOptions("QSQLITE_UPDATE_KEY=root");
if (!dbconn.open()) {
qDebug() << "Can not open connection: " << dbconn.lastError().driverText();
exit(CONNECTION_FAILED);
}
}
//删除数据库密码
void removePassword()
{
QSqlDatabase dbconn = QSqlDatabase::addDatabase("SQLITECIPHER");
dbconn.setDatabaseName(DB_FILE_PATH);
dbconn.setPassword("root");
dbconn.setConnectOptions("QSQLITE_REMOVE_KEY");
if (!dbconn.open()) {
qDebug() << "Can not open connection: " << dbconn.lastError().driverText();
exit(CONNECTION_FAILED);
}
dbconn.close();
}
参考
https://www.cnblogs.com/l199616j/p/10694036.html
https://github.com/pawelsalawa/sqlitestudio/releases
https://www.sqlite.org/download.html