• Ubuntu20 QT6.0 编译 ODBC 驱动


    一、新建测试项目

    新建一个控制台项目,

    1. // main.cpp
    2. #include
    3. #include
    4. #include
    5. int main(int argc, char *argv[])
    6. {
    7. QCoreApplication a(argc, argv);
    8. // 获取当前Qt支持的驱动列表
    9. QStringList drivers = QSqlDatabase::drivers();
    10. foreach (QString driver, drivers)
    11. {
    12. qDebug() << driver;
    13. }
    14. return a.exec();
    15. }
    1. // pro 开启 SQL 模块
    2. QT += sql

    可以看到,现在只支持 SQLITE

    二、安装 ODBC 相关依赖    

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

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

    1. # 安装 odbc 开发包
    2. sudo apt install -y unixodbc-dev
    3. # 安装 odbc 管理工具
    4. sudo apt install -y unixodbc
    5. # 输出 odbc 配置信息
    6. odbcinst -j

    安装 ODBC MSSQL 驱动,

    1. # 微软官方文档 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
    2. curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
    3. curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
    4. sudo apt-get update
    5. sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17

    三、安装 SQL Server(可选)

    1. wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
    2. sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2022.list)"
    3. sudo apt-get install -y mssql-server
    4. # 查看状态
    5. sudo systemctl status mssql-server --no-pager

    四、通过 QT 编译 ODBC

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

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

    1. # odbc.pro
    2. TARGET = qsqlodbc
    3. HEADERS += $$PWD/qsql_odbc_p.h
    4. SOURCES += $$PWD/qsql_odbc.cpp $$PWD/main.cpp
    5. #QMAKE_USE += odbc
    6. unix: DEFINES += UNICODE
    7. OTHER_FILES += odbc.json
    8. # add odbc lib
    9. LIBS += -L/usr/lib/x86_64-linux-gnu/ -lodbc
    10. INCLUDEPATH += /usr/include/x86_64-linux-gnu
    11. PLUGIN_CLASS_NAME = QODBCDriverPlugin
    12. include(../qsqldriverbase.pri)

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

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

    五、QT 连接  MSSQL

    配置 ODBC 数据源,

    1. # 输出 odbc 配置信息
    2. odbcinst -j
    3. # odbcinst.ini 保存的是驱动信息 DRIVERS............: /etc/odbcinst.ini
    4. # odbc.ini 保存的是系统数据源信息 SYSTEM DATA SOURCES: /etc/odbc.ini
    5. vim /etc/odbc.ini
    6. # 添加以下配置
    7. [mssql]
    8. Driver=ODBC Driver 17 for SQL Server
    9. PORT=1433
    10. SERVER=localhost
    11. Database=mytestdb
    12. #USER=sa
    13. #Password=123456789
    14. # 连接测试
    15. isql mssql sa 123456789

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

    1. // main.cpp
    2. #include
    3. #include
    4. #include
    5. #include
    6. int main(int argc, char *argv[])
    7. {
    8. // 数据库配置
    9. QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    10. // 配置系统数据源信息,对应 odbc.ini 文件的配置
    11. QString dsn = QString::fromLocal8Bit("mssql");
    12. // 数据源名称
    13. db.setDatabaseName(dsn);
    14. // 服务器名称
    15. db.setHostName("localhost");
    16. // 端口
    17. db.setPort(1433);
    18. // 用户名
    19. db.setUserName("sa");
    20. // 密码
    21. db.setPassword("123456789");
    22. // 数据库连接
    23. bool ok = db.open();
    24. if(ok)
    25. {
    26. qDebug() << "db open ok!";
    27. }
    28. else {
    29. qDebug() << "db open error: " << db.lastError();
    30. }
    31. // 数据库关闭
    32. db.close();
    33. return 0;
    34. }

    或者使用 Qstring 连接,

    1. // main.cpp
    2. #include
    3. #include
    4. #include
    5. #include
    6. int main(int argc, char *argv[])
    7. {
    8. // 数据库配置
    9. QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    10. // 配置驱动与数据库账号密码等信息,相当于 odbc.ini 文件
    11. QString dsn = QString("DRIVER={MSSQL};SERVER=%1;DATABASE=%2;UID=%3;PWD=%4;IC=MS-SQL").arg("localhost").arg("master").arg("sa").arg("123456789");
    12. // 数据源名称
    13. db.setDatabaseName(dsn);
    14. // 数据库连接
    15. bool ok = db.open();
    16. if(ok)
    17. {
    18. qDebug() << "db open ok!";
    19. }
    20. else {
    21. qDebug() << "db open error: " << db.lastError();
    22. }
    23. // 数据库关闭
    24. db.close();
    25. return 0;
    26. }

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

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

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

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

    Beautifier

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

  • 相关阅读:
    深度学习推理显卡设置
    一篇文章带你了解 JSON.stringfy和JSON.parse 的用法
    2022年计算机专业毕业设计课题推荐
    线性代数学习笔记6-3:行列式的计算、代数余子式
    【C++算法】is_partitioned、partition_copy和partition_point
    数据分析案例-基于snownlp模型的MatePad11产品用户评论情感分析(文末送书)
    k8s知识点
    Design Pattern (GoF)
    我知道哪里有问题了浪费各位时间了这个问题不用再看啦
    linux中断下文工作队列之共享工作队列(中断四)
  • 原文地址:https://blog.csdn.net/weixin_47560078/article/details/132825962