Ubuntu20 QT6.0 编译 ODBC 驱动

一、新建测试项目

新建一个控制台项目,

// main.cpp 

#include <QCoreApplication>
#include <QSqlDatabase>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 获取当前Qt支持的驱动列表
    QStringList drivers = QSqlDatabase::drivers();

    foreach (QString driver, drivers)
    {
        qDebug() << driver;
    }

    return a.exec();
}
// pro 开启 SQL 模块
QT += sql

可以看到,现在只支持 SQLITE ,

二、安装 ODBC 相关依赖    

在安装目录下 /qt-everywhere-src-6.0.0/qtbase/src/plugins/sqldrivers 可以看到各种数据库驱动源码,准备通过 QT 编译 odbc ,

在此之前先安装 odbc 开发包,

# 安装 odbc 开发包
sudo apt install -y unixodbc-dev

# 安装 odbc 管理工具
sudo apt install -y unixodbc

# 输出 odbc 配置信息
odbcinst -j 

安装 ODBC MSSQL 驱动,

# 微软官方文档 https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15&tabs=ubuntu18-install%2Cubuntu17-install%2Cdebian8-install%2Credhat7-13-install%2Crhel7-offline#ubuntu18

curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc

curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list

sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17

三、安装 SQL Server(可选)

wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc

sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2022.list)"

sudo apt-get install -y mssql-server

# 查看状态
sudo systemctl status mssql-server --no-pager

四、通过 QT 编译 ODBC

使用 QT 打开 odbc.pro 项目,会报错找不到库,

需要配置一下 odbc.pro 文件,

# odbc.pro

TARGET = qsqlodbc

HEADERS += $$PWD/qsql_odbc_p.h
SOURCES += $$PWD/qsql_odbc.cpp $$PWD/main.cpp

#QMAKE_USE += odbc
unix: DEFINES += UNICODE

OTHER_FILES += odbc.json

# add odbc lib
LIBS += -L/usr/lib/x86_64-linux-gnu/ -lodbc
INCLUDEPATH += /usr/include/x86_64-linux-gnu

PLUGIN_CLASS_NAME = QODBCDriverPlugin
include(../qsqldriverbase.pri)

然后构建项目即可,最终可以在安装目录下找到对应生成的动态库,

到这里,QT 已经支持 ODBC 数据库了,

五、QT 连接  MSSQL

配置 ODBC 数据源,

# 输出 odbc 配置信息
odbcinst -j 

# odbcinst.ini 保存的是驱动信息 DRIVERS............: /etc/odbcinst.ini
# odbc.ini 保存的是系统数据源信息 SYSTEM DATA SOURCES: /etc/odbc.ini

vim /etc/odbc.ini
# 添加以下配置
[mssql]
Driver=ODBC Driver 17 for SQL Server
PORT=1433
SERVER=localhost
Database=mytestdb
#USER=sa
#Password=123456789

# 连接测试
isql mssql sa 123456789

这时候就能正常连接数据库了,接下来使用 QT 连接数据库,

// main.cpp
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlError>

int main(int argc, char *argv[])
{
    // 数据库配置
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    // 配置系统数据源信息,对应 odbc.ini 文件的配置
    QString dsn = QString::fromLocal8Bit("mssql");
    // 数据源名称
    db.setDatabaseName(dsn);
    // 服务器名称
    db.setHostName("localhost");
    // 端口
    db.setPort(1433);
    // 用户名
    db.setUserName("sa");
    // 密码
    db.setPassword("123456789");
    // 数据库连接
    bool ok = db.open();
    if(ok)
    {
        qDebug() << "db open ok!";
    }
    else {
        qDebug() << "db open error: " << db.lastError();
    }
    // 数据库关闭
    db.close();
    return 0;
}

或者使用 Qstring 连接,

// main.cpp
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlError>

int main(int argc, char *argv[])
{
    // 数据库配置
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    // 配置驱动与数据库账号密码等信息,相当于 odbc.ini 文件
    QString dsn = QString("DRIVER={MSSQL};SERVER=%1;DATABASE=%2;UID=%3;PWD=%4;IC=MS-SQL").arg("localhost").arg("master").arg("sa").arg("123456789");
    // 数据源名称
    db.setDatabaseName(dsn);
    // 数据库连接
    bool ok = db.open();
    if(ok)
    {
        qDebug() << "db open ok!";
    }
    else {
        qDebug() << "db open error: " << db.lastError();
    }

    // 数据库关闭
    db.close();
    return 0;
}

六、彩蛋:自定义代码格式化

实际上,Qt Creator 自带 C++ 的代码格式化,如果需要自定义自己的代码格式化风格,则可以参考一下方法,

# 安装 C 格式化工具
sudo apt install clang-format

打开 QT 菜单【帮助】->【关于插件】,输入

Beautifier

点击工具下的“Beautifier”选项,选中“格式化当前文件”即可实现代码格式化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金汐脉动 | PulseTide

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值