Qt通过ODBC和QPSQL两种方式连接PostgreSQL或PolarDB PostgreSQL版

发布于:2025-04-19 ⋅ 阅读:(68) ⋅ 点赞:(0)

一、概述

以下主要在Windows下验证连接PolarDB PostgreSQL版(阿里云兼容 PostgreSQL的PolarDB版本)。Linux下类似,ODBC方式则需要配置odbcinst.ini和odbc.ini。

二、代码

以下为完整代码,包含两种方式连接数据库,并查询表。

#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QtSql>
#include <QDebug>

//通过sqldrivers/qsqlpsql.dll连接的方式连接PostgreSQL或PolarDB PostgreSQL版
int test1()
{
    // 创建数据库连接
    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("127.0.0.1"); // 数据库服务器IP
    db.setPort(5432);            // 默认端口
    db.setDatabaseName("test");  // 数据库名称
    db.setUserName("postgres");  // 用户名
    db.setPassword("123456");    // 密码

    if (!db.open())
    {
        qDebug() << "Connection failed:" << db.lastError();
        return -1;
    }
    qDebug() << "Connected to PostgreSQL!";

    // 执行查询
    QSqlQuery query;
    if (query.exec("SELECT * FROM arc"))
    {
        while (query.next())
        {
            QString value0 = query.value(0).toString();
            qDebug() << value0;
        }
    } else
    {
        qDebug() << "Query error:" << query.lastError();
    }

    db.close();
}

//通过创建ODBC数据源的方式连接PostgreSQL或PolarDB PostgreSQL版, 需要先配置好ODBC数据源
int test2()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");

    ------------- 配置连接字符串(方式1:直接参数,测试通过) -------------------
    //QString connStr = "DRIVER={PolarDB2 ANSI(x64)};"  // 驱动名称需与系统配置一致
    //                  "Server=127.0.0.1;"            // 服务器IP
    //                  "Port=5432;"                   // 端口
    //                  "Database=test;"               // 数据库名
    //                  "Uid=postgres;"                // 用户名
    //                  "Pwd=123456;";                 // 密码
    //db.setDatabaseName(connStr);  // 通过连接字符串设置参数

     ------------- DSN 中已存储密码等参数?(方式2,测试通过)-------------
    db.setDatabaseName("DSN=PostgreSQL30;DRIVER={PolarDB2 ANSI(x64)};");

    if (!db.open()) {
        qDebug() << "Connection failed:" << db.lastError();
        return -1;
    }
    qDebug() << "Connected via ODBC!";


    QSqlQuery query;
    if (query.exec("SELECT * FROM arc")) {
        while (query.next()) {
            QString value0 = query.value(0).toString();
            qDebug() << value0;
        }
    } else {
        qDebug() << "Query error:" << query.lastError();
    }

    db.close();
    return 0;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug() << "drivers:" << QSqlDatabase::drivers();
    test2();

    return 0;
}

三、参考依赖库

注:Windows下,debug版本测试的,release版本类似。除了qsqlpsqld.dll和libpq.dll,还需要相关的依赖库。

D:\test\debug>dir /b /s

D:\test\debug\libcrypto-3-x64.dll
D:\test\debug\libiconv-2.dll
D:\test\debug\libintl-9.dll
D:\test\debug\libpq.dll
D:\test\debug\libssl-3-x64.dll
D:\test\debug\libwinpthread-1.dll
D:\test\debug\main.obj
D:\test\debug\Qt5Cored.dll
D:\test\debug\Qt5Sqld.dll
D:\test\debug\sqldrivers
D:\test\debug\TestSqlDrivers.exe
D:\test\debug\sqldrivers\qsqlited.dll
D:\test\debug\sqldrivers\qsqlodbcd.dll
D:\test\debug\sqldrivers\qsqlpsqld.dll

D:\test\debug>

四、Windows下数据源配置参考

 


网站公告

今日签到

点亮在社区的每一天
去签到