Ubuntu20 QT6.0 编译 ODBC 驱动

一、新建测试项目

新建一个控制台项目,

Ubuntu20 QT6.0 编译 ODBC 驱动_第1张图片

// main.cpp 

#include 
#include 
#include 

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

Ubuntu20 QT6.0 编译 ODBC 驱动_第2张图片

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

二、安装 ODBC 相关依赖    

Ubuntu20 QT6.0 编译 ODBC 驱动_第3张图片

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

Ubuntu20 QT6.0 编译 ODBC 驱动_第4张图片

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

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

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

# 输出 odbc 配置信息
odbcinst -j 

Ubuntu20 QT6.0 编译 ODBC 驱动_第5张图片

安装 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

Ubuntu20 QT6.0 编译 ODBC 驱动_第6张图片

Ubuntu20 QT6.0 编译 ODBC 驱动_第7张图片

Ubuntu20 QT6.0 编译 ODBC 驱动_第8张图片

Ubuntu20 QT6.0 编译 ODBC 驱动_第9张图片

四、通过 QT 编译 ODBC

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

Ubuntu20 QT6.0 编译 ODBC 驱动_第10张图片

需要配置一下 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)

Ubuntu20 QT6.0 编译 ODBC 驱动_第11张图片

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

Ubuntu20 QT6.0 编译 ODBC 驱动_第12张图片

Ubuntu20 QT6.0 编译 ODBC 驱动_第13张图片

到这里,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 
#include 
#include 
#include 

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 
#include 
#include 
#include 

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;
}

Ubuntu20 QT6.0 编译 ODBC 驱动_第14张图片

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

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

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

Ubuntu20 QT6.0 编译 ODBC 驱动_第15张图片

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

Beautifier

Ubuntu20 QT6.0 编译 ODBC 驱动_第16张图片

Ubuntu20 QT6.0 编译 ODBC 驱动_第17张图片

Ubuntu20 QT6.0 编译 ODBC 驱动_第18张图片

Ubuntu20 QT6.0 编译 ODBC 驱动_第19张图片

Ubuntu20 QT6.0 编译 ODBC 驱动_第20张图片

Ubuntu20 QT6.0 编译 ODBC 驱动_第21张图片

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

你可能感兴趣的:(禅与QT,混乱编程宇宙,数据库,qt,linux)