• 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 参考代码

    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();
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    2、QT访问SQLServer数据库

    2.1、关于QT访问SQL Server数据库的驱动编译请参阅
    2.1.1 《QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库
    2.2 参考代码

    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();
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    3、QT访问MySQL数据库

    3.1 关于QT访问MySQL数据库的驱动编译请参阅
    3.1.1 《QT学习笔记-开发环境编译Qt MySql数据库驱动与交叉编译Qt MySql数据库驱动
    3.2 参考代码

    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();
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    4、QT访问PostgreSQL数据库

    4.1 关于QT访问PostgreSQL数据库的驱动编译请参阅
    4.1.1《QT学习笔记-QT安装postgresql驱动
    4.1.2 《QT学习笔记-postgresq数据库l驱动移植到RK3568ARM开发板
    4.2 参考代码

    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();
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    5、QT访问Access数据库

    5.1 参考代码

    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();
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

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

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

    QSqlDatabase db1 = QSqlDatabase::addDatabase("QODBC", "MainThread");		
    QSqlDatabase db2 = QSqlDatabase::addDatabase("QODBC", "SubThread");
    //db1和db2在采用不用的连接名称MainThread、SubThread
    
    • 1
    • 2
    • 3
  • 相关阅读:
    基于FPGA的飞机的小游戏
    【Bootstrap】快速上手Bootstrap 第一部分 理解响应式布局
    我与 COSCon 的故事【我们的COSCon】
    C++提高篇:深入理解纯虚函数和抽象类
    Stable Diffusion AI绘图使用记录
    C++并发与多线程学习笔记--线程启动、结束,创建线程多法
    Mybatis做批量操作
    Linux中的磁盘
    Android原生项目集成uniMPSDK(Uniapp)遇到的报错总结
    为什么反序列化失败?
  • 原文地址:https://blog.csdn.net/zlbdmm/article/details/133901726