一、概述
以下主要在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"); // 数据库服务器IPdb.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.dllD:\test\debug>
四、Windows下数据源配置参考