QT学习笔记-QT访问各种关系数据库笔记汇总

QT学习笔记-QT访问各种关系数据库笔记汇总

在使用QT进行应用开发过程中,不可避免的会涉及到访问关系数据库,为了方便后期查阅笔记,在本文进行一下汇总。

1、QT访问Oracle数据库

1.1、关于QT访问Oracle数据库的驱动编译请参阅

1.1.1 《QT学习笔记-QT安装oracle oci驱动

1.1.2 《QT学习笔记-oracle oci数据库驱动交叉编译并移植到ARM开发板

1.2、关键步骤:

1.2.1 配置oracleclient的环境变量LD_LIBRARY_PATH,或者直接在代码中通过QLibrary加载依赖库

1.2.2 参考代码

c 复制代码
void Widget::on_btnDbTest_clicked()
{
#ifdef Q_OS_WIN
    QLibrary *oci_lib = new QLibrary("D:/oracleinstantclient_19_19/oci.dll");
    oci_lib->load();
    if (!oci_lib->isLoaded())
    {
        qDebug() << "oracle oci动态库加载失败!";
        return;
    }
#else
    QLibrary *oci_lib = new QLibrary("/usr/lib/oracleclient/instantclient_19_19/libclntsh.so");
    bool loadresult = oci_lib->load();
    qDebug() << "oracle oci动态库load result is " << loadresult;
    if (!loadresult)
    {
        qDebug() << oci_lib->errorString();
    }
    if (!oci_lib->isLoaded())
    {
        qDebug() << "oracle oci动态库libclntsh.so加载失败!";
        return;
    }
#endif
    //以下代码测试访问Oracle数据
    QSqlDatabase  db = QSqlDatabase::addDatabase("QOCI");
    db.setHostName("xxx.xxx.xxx.xxx");		//数据库服务器的ip
    db.setPort(1521);						//数据库服务器的端口号
    db.setDatabaseName("orcl");    			//此处写你数据库的实例名称
    db.setUserName("oracle");				//写数据库的用户名
    db.setPassword("oracle@123");			//写数据库的密码

    if (!db.open())
    {
        qDebug() << "数据库连接失败!";
        QSqlError lastError = db.lastError();
        qCritical() << lastError.nativeErrorCode() << ", " << lastError.text();
    }
    else
    {
        qDebug() << "数据库连接成功!";
        QSqlQuery query(db);
        if (query.exec("select * from sys_user"))
        {
            qDebug() << "查询表格sys_user成功!";
            while(query.next())
            {
                qDebug() << query.value(0).toInt() << ", " << query.value(1).toString() << ", " << query.value(2).toString() << "," << query.value(3).toString();
            }
        }
    }
}

2、QT访问SQLServer数据库

2.1、关于QT访问SQL Server数据库的驱动编译请参阅

2.1.1 《QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库

2.2 参考代码

c 复制代码
void Widget::on_btnDbTest_clicked()
{
    //以下代码测试访问SQLServer数据
    QSqlDatabase  db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("mydsn");    	//此处写你配置的ODBC数据源的名称
    db.setUserName("sa");				//写数据库的用户名
    db.setPassword("sa@123");			//写数据库的密码

    if (!db.open())
    {
        qDebug() << "数据库连接失败!";
        QSqlError lastError = db.lastError();
        qCritical() << lastError.nativeErrorCode() << ", " << lastError.text();
    }
    else
    {
        qDebug() << "数据库连接成功!";
        QSqlQuery query(db);
        if (query.exec("select * from sys_user"))
        {
            qDebug() << "查询表格sys_user成功!";
            while(query.next())
            {
                qDebug() << query.value(0).toInt() << ", " << query.value(1).toString() << ", " << query.value(2).toString() << "," << query.value(3).toString();
            }
        }
    }
}

3、QT访问MySQL数据库

3.1 关于QT访问MySQL数据库的驱动编译请参阅

3.1.1 《QT学习笔记-开发环境编译Qt MySql数据库驱动与交叉编译Qt MySql数据库驱动

3.2 参考代码

c 复制代码
void Widget::on_btnDbTest_clicked()
{
    //以下代码测试访问MySQL数据
    QSqlDatabase  db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("xxx.xxx.xxx.xxx");		//数据库服务器的ip
    db.setPort(3306);						//数据库服务器的端口号
    db.setDatabaseName("mydbname");    //此处写你数据库的名称
    db.setUserName("root");			//写mysql数据库的用户名
    db.setPassword("root@123");			//写mysql数据库的密码

    if (!db.open())
    {
        qDebug() << "数据库连接失败!";
        QSqlError lastError = db.lastError();
        qCritical() << lastError.nativeErrorCode() << ", " << lastError.text();
    }
    else
    {
        qDebug() << "数据库连接成功!";
        QSqlQuery query(db);
        if (query.exec("select * from sys_user"))
        {
            qDebug() << "查询表格sys_user成功!";
            while(query.next())
            {
                qDebug() << query.value(0).toInt() << ", " << query.value(1).toString() << ", " << query.value(2).toString() << "," << query.value(3).toString();
            }
        }
    }
}

4、QT访问PostgreSQL数据库

4.1 关于QT访问PostgreSQL数据库的驱动编译请参阅

4.1.1《QT学习笔记-QT安装postgresql驱动

4.1.2 《QT学习笔记-postgresq数据库l驱动移植到RK3568ARM开发板

4.2 参考代码

c 复制代码
void Widget::on_btnDbTest_clicked()
{
    //以下代码测试访问PostgreSQL数据
    QSqlDatabase  db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("xxx.xxx.xxx.xxx");		//数据库服务器的ip
    db.setPort(5432);						//数据库服务器的端口号
    db.setDatabaseName("mydbname");    		//此处写你数据库的名称
    db.setUserName("postgres");				//写数据库的用户名
    db.setPassword("postgres");				//写数据库的密码

    if (!db.open())
    {
        qDebug() << "数据库连接失败!";
        QSqlError lastError = db.lastError();
        qCritical() << lastError.nativeErrorCode() << ", " << lastError.text();
    }
    else
    {
        qDebug() << "数据库连接成功!";
        QSqlQuery query(db);
        if (query.exec("select * from sys_user"))
        {
            qDebug() << "查询表格sys_user成功!";
            while(query.next())
            {
                qDebug() << query.value(0).toInt() << ", " << query.value(1).toString() << ", " << query.value(2).toString() << "," << query.value(3).toString();
            }
        }
    }
}

5、QT访问Access数据库

5.1 参考代码

c 复制代码
void Widget::on_btnDbTest_clicked()
{
    //以下代码测试访问Access数据
    QSqlDatabase  db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=myaccessfile.mdb");    	//此处写你配置的ODBC数据源的名称或这连接字符串
    db.setPassword("sa@123");			//写数据库的密码

    if (!db.open())
    {
        qDebug() << "数据库连接失败!";
        QSqlError lastError = db.lastError();
        qCritical() << lastError.nativeErrorCode() << ", " << lastError.text();
    }
    else
    {
        qDebug() << "数据库连接成功!";
        QSqlQuery query(db);
        if (query.exec("select * from sys_user"))
        {
            qDebug() << "查询表格sys_user成功!";
            while(query.next())
            {
                qDebug() << query.value(0).toInt() << ", " << query.value(1).toString() << ", " << query.value(2).toString() << "," << query.value(3).toString();
            }
        }
    }
}

6、QT多线程中访问数据库的要点

在不同线程中访问数据库时,关键时在创建QSqlDatabase对象时采用不用的连接名称,如下:

c 复制代码
QSqlDatabase db1 = QSqlDatabase::addDatabase("QODBC", "MainThread");		
QSqlDatabase db2 = QSqlDatabase::addDatabase("QODBC", "SubThread");
//db1和db2在采用不用的连接名称MainThread、SubThread
相关推荐
KangkangLoveNLP26 分钟前
手动实现一个迷你Llama:使用SentencePiece实现自己的tokenizer
人工智能·深度学习·学习·算法·transformer·llama
kfepiza40 分钟前
`accept_ra` 和 `autoconf` 和 `forwarding` 的关系 笔记250404
linux·网络·笔记·tcp/ip·智能路由器·ip·tcp
浪淘沙jkp1 小时前
大模型学习二:DeepSeek R1+蒸馏模型组本地部署与调用
学习·deepseek
kfepiza1 小时前
Debian编译安装mysql8.0.41源码包 笔记250401
数据库·笔记·mysql·debian·database
JhonKI1 小时前
【从零实现Json-Rpc框架】- 项目实现 - 客户端注册主题整合 及 rpc流程示意
c++·qt·网络协议·rpc·json
m0_613607011 小时前
数据集(Dataset)和数据加载器(DataLoader)-pytroch学习3
学习
序属秋秋秋2 小时前
算法基础_基础算法【位运算 + 离散化 + 区间合并】
c语言·c++·学习·算法·蓝桥杯
"_rainbow_"3 小时前
Qt添加资源文件
开发语言·qt
虾球xz3 小时前
游戏引擎学习第198天
学习·游戏引擎
网络安全指导员4 小时前
如何在JMeter中配置断言,将非200状态码视为测试成功
网络·学习·jmeter·安全·web安全·架构