一、新建测试项目
新建一个控制台项目,
// 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”选项,选中“格式化当前文件”即可实现代码格式化。