Loading... # 什么是QT 简单来说,就是一个UI工具包,这个工具包是跨平台的,能在Windows、Unix、甚至安卓上运行,底层业务语言可以选择C和python。 # 什么是sqlite 轻量级的数据库,安卓应用首选数据库,只需要一个驱动包就可以使用了,其中不需要服务应用的支撑,数据部分只是一个文件即可,容易迁移,轻量等诸多优势。 # QT调用sqlite ## 更改配置文件 找到pro文件,新增sql包的引入。 ```properties QT += core gui sql ``` ## 引入头文件 ```c++ #include <QSqlQuery> #include <QSqlDatabase> #include <QSqlError> ``` ## 业务代码 ```c++ QSqlDatabase db; // 定义SQL连接驱动 bool database::init(){ if(QSqlDatabase::contains("qt_sql_default_connection"))//增加这步是为了防止重复连接数据库 db = QSqlDatabase::database("qt_sql_default_connection"); else db = QSqlDatabase::addDatabase("QSQLITE");//添加sqlite类型的数据库 db.setDatabaseName("records.db");//指定数据库名 if(db.open()){ qDebug()<<"open success"; database::exec(createRecordTable); // 创建表SQL database::exec(createRecordTable_idx1); // 创建索引SQL } return true; } // 这里简单的封装一下 bool database::exec(QString sql){ // 执行sql if(!db.isOpen())db.open(); QSqlQuery execution(db); if(execution.exec(sql)){ execution.finish(); return true; }else{ execution.finish(); qDebug()<<"execute error"<<execution.lastError(); return false; } } QVector<QVector<QVariant>> database::query(QString sql,int columnNumber){ // 执行查询sql if(!db.isOpen())db.open(); QSqlQuery execution2(db); execution2.exec(sql); QVector<QVector<QVariant>> tvector; while(execution2.next()){ QVector<QVariant> tmap; for(int i=0;i<columnNumber;i++){ tmap.insert(i,execution2.value(i)); } tvector.append(tmap); } execution2.finish(); return tvector; } // 解析每日记录 std::map<std::string, long long> database::getDayRecords(QString date){ std::map<std::string, long long> keyRecord; QVector<QVector<QVariant>> loads = database::query(queryDayRecords.arg(date),3); // 3指的是有三个字段 QVector<QVector<QVariant>>::iterator iter; iter = loads.begin(); // 使用迭代器遍历行数据 while (iter != loads.end()) { // iter其中就是每一行中的具体数据,根据索引获取确切的记录值 keyRecord[iter->at(1).toString().toStdString()] = iter->at(2).toLongLong(); iter++; } return keyRecord; } ``` # 踩雷 ## 报错 Unable to fetch row 我的解决方案是每次查询操作完成后,执行`execution.finish();`,可以理解为session结束吧,事物锁引起的还是其他原因没有深究,目前是没有报这个错误了。 # 截图 ![image.png](https://www.zunmx.top/usr/uploads/2023/05/633503843.png) © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏