qt操作sqlite数据库

有两种方法,一种使用qt中的QSqlDatabase模块,另一种使用sqlite3提供的c/c++接口。


其中第一种需要需要在工程下的.pro文件中加入“QT += sql”,在qt安装目录对应的编译器下的plugins目录中要有sqldrivers文件夹

在这里插入图片描述


第二种方法需要在sqlite官网(https://www.sqlite.org/download.html)下载源码,将其中的头文件和cpp文件加入当前工程

在这里插入图片描述


两种方法代码如下:

//方法一:QT数据库模块
void DB_Operate(){

    QSqlDatabase m_db;
    //加载数据库驱动
    m_db = QSqlDatabase::addDatabase("QSQLITE");
    //指定数据库文件路径
    m_db.setDatabaseName("backuplist.db");
    //打开数据库
    if(!m_db.open())
    {
        qDebug()<< "open db failed";
        m_db.close();
    }

    QSqlQuery *query = new QSqlQuery();
    QString commandLine = "create table if not exists DriversBackup(DeviceName,BackupName,BackupDateTime)";
    query->exec(commandLine);

    commandLine = "insert into DriversBackup(DeviceName,BackupName,BackupDateTime) values('desc','driver','" + QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss") + "')";
    if(!query->exec(commandLine)){
        qDebug()<< "insert data failed";
    }

    commandLine = "select * from DriversBackup";
    if(!query->exec(commandLine)){
        qDebug()<< "select data failed";
    }else{
        while(query->next()){
            qDebug()<< query->value("BackupName").toString();
            qDebug()<< query->value("DeviceName").toString();
            qDebug()<< query->value("BackupDateTime").toString();
        }
    }

    m_db.close();
}


//方法二:sqlite3 c/c++接口
static int callback(void *data, int argc, char **argv, char **azColName){
    QString strRec(argv[0]);
    QStringList text = strRec.split(" ");
    foreach (QString txt, text) {
        if (txt.length() > 0) {
            qDebug()<< txt;
        }
        return 0;
    }
}

void DB_Operate(int)
{
    sqlite3 *db;
    int ret = sqlite3_open("tmp.db",&db);
    if(ret != SQLITE_OK){
        sqlite3_close(db);
        return;
    }

    QString commandLine = "create table if not exists DriversBackup(DeviceName,BackupName,BackupDateTime)";
    char *msg = 0;
    ret = sqlite3_exec(db, commandLine.toStdString().c_str(), callback, 0, &msg);
    if(ret != SQLITE_OK){
        sqlite3_free(msg);
        sqlite3_close(db);
        return;
    }

    commandLine = "insert into DriversBackup(DeviceName,BackupName,BackupDateTime) values('desc','driver','" + QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss") + "')";
    ret = sqlite3_exec(db, commandLine.toStdString().c_str(), callback, 0, &msg);
    if(ret != SQLITE_OK){
        sqlite3_free(msg);
        sqlite3_close(db);
        return;
    }

    commandLine = "select * from DriversBackup";
    ret = sqlite3_exec(db, commandLine.toStdString().c_str(), callback, 0, &msg);

    sqlite3_free(msg);
    sqlite3_close(db);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLite封装的数据库实现类 可以方便使用和调用接口 附带详细的调用说明 只使用C++ MFC 创建数据库 CppSQLite3DB db; CFileFind fFind; if fFind FindFile T "dataAcquisition 1 db" { db open T "dataAcquisition MagneticDataAcquisition db" NULL ; 创建文件 1#磁钢波峰数据 db execDML T "CREATE TABLE MagDate 1 CarID TEXT 30 AlxID INT 2 SamplingValue INT 2 Spleed INT 2 Degree INT 2 ;" ; 2#磁钢波峰数据 db execDML T "CREATE TABLE MagDate 2 CarID TEXT 30 AlxID INT 2 SamplingValue INT 2 Spleed INT 2 Degree INT 2 ;" ; 3#磁钢波峰数据 db execDML T "CREATE TABLE MagDate 3 CarID TEXT 30 AlxID INT 2 SamplingValue INT 2 Spleed INT 2 Degree INT 2 ;" ; 4#磁钢波峰数据 db execDML T "CREATE TABLE MagDate 4 CarID TEXT 30 AlxID INT 2 SamplingValue INT 2 Spleed INT 2 Degree INT 2 ;" ; 列车采样信息汇总 1# 2#磁钢得到的数据 db execDML T "CREATE TABLE TrainNode 12 TrainID TEXT 30 AlxNums 1 INT 2 AlxNums 2 INT 2 MaxSpleed INT 2 MinSpleed INT 2 AvgSpleed INT 2 SpleedDegree INT 2 MaxWaveSamp 1 INT 2 MinWaveSamp 1 INT 2 AvgWaveSamp 1 INT 2 MaxWaveSamp 2 INT 2 MinWaveSamp 2 INT 2 AvgWaveSamp 2 INT 2 YouXiao TEXT 2 ;" ; 列车采样信息汇总 3# 4#磁钢得到的数据 db execDML T "CREATE TABLE TrainNode 34 TrainID TEXT 30 AlxNums 3 INT 2 AlxNums 4 INT 2 MaxSpleed INT 2 MinSpleed INT 2 AvgSpleed INT 2 SpleedDegree INT 2 MaxWaveSamp 3 INT 2 MinWaveSamp 3 INT 2 AvgWaveSamp 3 INT 2 MaxWaveSamp 4 INT 2 MinWaveSamp 4 INT 2 AvgWaveSamp 4 INT 2 YouXiao TEXT 2 ;" ; 磁钢故障报警记录 db execDML T "CREATE TABLE GuZhangInfo TrainID TEXT 30 MagNetID INT 2 GuZhangName TEXT 100 ;" ; 列车速度最终值用于存储 可实现用户更改 db execDML T "CREATE TABLE SpleedDegree DegreeID INT 2 AvgWaveSamp 1 INT 2 AvgWaveSamp 2 INT 2 AvgWaveSamp 3 INT 2 AvgWaveSamp 4 INT 2 ;" ; 插入预先准备好的数据 for int i 0;i<m GlobalPublicManager m MaxSpleedDegree;i++ { CString
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值