四、Qt中使用sqlite数据库详解(两种使用方式)

四、Qt中使用sqlite数据库详解(两种使用方式),第1张

Qt中使用Sqlite数据库

在Qt中使用Sqlite目前比较常用的有两种方式,一种是使用Qt内部的Sql模块,这种方式比较简单,接口使用方便,很推荐,但是常常因为驱动不兼容,缺少驱动等出现一堆问题,主要是环境搭建的问题,在嵌入式设备中,想这样使用必须移植编译对应的Sqlite库驱动,很麻烦,其实还有另一种方式可以实现,不通过Qt的Sql模块,直接使用Sqlite的lib库,使用Sqlite的标准C/C++接口就行。

我们来看直接使用sqlite的方式:

1.获取sqlite的必要的库文件

这是所需要的几个文件,我们在工程目录下创建一个sqlLib(你随意,我上面的就是简单的lib)目录,这4个文件放到里面,这几个文件是sqlite官网下载的,下载你电脑对应位数的,也可以用我提供的,因为我还没整理资料,我放网盘几天就丢了乱了,要的直接回复邮箱或者私信我我发给你,这是我亲测成功的

2.加载库

3.包含sqlite3.h头文件

注意包含头文件的路径是你工程目录下的lib目录下,就是你存放库文件的路径,一般是./lib就行,然后就可以使用Sqlite提供的C/C++的接口 *** 作数据库了

例:

//初始化打开数据库,你可以直接复制过去改一下你的数据库path就能直接用
bool SqlInputModel::SqlDBInit()
{
    QString path = qApp->applicationDirPath()+"/py.db";
    int ret = sqlite3_open(path.toStdString().c_str(), &mydb);
    if(ret == SQLITE_OK) {
        return true;
    }
    else {
        return false;
    }
}
//查询到结果的回调函数,查到某一个字段的时候,会触发此函数
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() << "MainWindow::selectChinese() txt:" << txt;
        }
        return 0;
    }
}
//从数据库查找东西,注意调用这个函数后,有结果返回会跳入回调函数,我将回调函数放在上面
void SqlInputModel::selectChinese()
{
    char *zErrMsg = 0;
    int rc;
    QString sql = QString("select word from pinyin where pinyin='beijing';");
    rc = sqlite3_exec(mydb, sql.toStdString().c_str(), callback, (void*)this, &zErrMsg);
    if( rc != SQLITE_OK ) {
        qDebug() <<  "SQL error: %s" <<  zErrMsg;
        sqlite3_free(zErrMsg);
    }
    else {
        qDebug() << "select OK";
    }
}

写的 *** 作就是给发指令,和查的函数一样,就发送的串不一样,就不再赘述

方式二、使用Qt自带的Sql模块 *** 作sqlite数据库

1.在工程文件也就是pro文件中加入sql模块

QT += sql

2.引入3个头文件

#include 
#include 
#include 

3.初始化打开数据库

QSqlDatabase DbConn;
DbConn = QSqlDatabase::addDatabase("QSQLITE", "py");
DbConn.setDatabaseName(qApp->applicationDirPath() + "/py.db");
bool dbRet = DbConn.open();

4.愉快的使用数据库

//所有的 *** 作呢都可以使用这个query来发送指令 *** 作,可以说没啥难度了
QString sql = QString("select word from pinyin where pinyin='%1'").arg(currentPY);
    bool sqlRet = query.exec(sql);
    qDebug() << "Execute sql :" << sql << ". return :" << sqlRet;
    //逐个将查询到的字词加入汉字队列
    while(query.next()) {
        QString result = query.value(0).toString();
        QStringList text = result.split(" ");
        foreach (QString txt, text) {
            if (txt.length() > 0) {
                qDebug() << "MainWindow::selectChinese() txt:" << txt;
            }
        }
    }

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1330792.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)

保存