

https://doc.qt.io/archives/qt-6.0/qsqldatabase.html
- Ubuntu 20.04
- QT6.0
- Microsoft SQL Server 2022 Developer Edition (64-bit)
先修改 /etc/odbc.ini 的数据源配置,指定连接数据库 vdb,
- sudo vim /etc/odbc.ini
-
- [mssql]
- Driver=MSSQL
- #USER=sa
- #Password=123456789
- PORT=1433
- SERVER=localhost
- Database=vdb
创建项目,


pro 配置开启 sql 模块,
QT += sql
新建头文件 connection.h,


- // connection.h
- #ifndef CONNECTION_H
- #define CONNECTION_H
-
- #include
- #include
- #include
-
- static bool connect_mssql(){
- // 数据库配置
- QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
- 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();
- }
- return ok;
- }
-
- #endif // CONNECTION_H
然后再在 main.cpp 中引用这个头文件,
- // main.cpp
- #include "mainwindow.h"
- #include "connection.h"
- #include
-
- int main(int argc, char *argv[])
- {
-
- if(!connect_mssql()){
- return 1;
- }
-
- QApplication a(argc, argv);
- MainWindow w;
- w.show();
- return a.exec();
- }

主窗口添加四个 Push Button,为四个按钮绑定单击信号槽函数,


然后在 mainwindow.cpp 分别实现四个槽函数,
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include
- #include
- #include
- #include
-
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- }
-
- MainWindow::~MainWindow()
- {
- delete ui;
- }
-
-
- void MainWindow::on_query_btn_clicked()
- {
- QSqlQuery query;
-
- // 查找表中 color = LightPink 的数据
- query.exec("select id, color, rgb, del_flag from vdb.dbo.color_define where color = 'LightPink'");
-
- while(query.next())
- {
- int id = query.value(0).toInt();
- QString color = query.value(1).toString();
- QString rgb = query.value(2).toString();
- int del_flag = query.value(3).toInt();
- // 输出
- qDebug() << id << " " << color << " " << rgb << " " << del_flag;
- }
- }
-
-
- void MainWindow::on_insert_btn_clicked()
- {
- // 创建 QSqlQuery 对象
- QSqlQuery query;
-
- if (!query.exec("insert into vdb.dbo.color_define(color,rgb,del_flag) values('LightPink','255,182,193',0)"))
- {
- qDebug() << query.lastError();
- }
- }
-
-
- void MainWindow::on_update_btn_clicked()
- {
- // 创建 QSqlQuery 对象
- QSqlQuery query;
-
- if (!query.exec("update vdb.dbo.color_define set del_flag = 1 where color = 'LightPink'"))
- {
- qDebug() << query.lastError();
- }
- }
-
-
- void MainWindow::on_delete_btn_clicked()
- {
- // 创建 QSqlQuery 对象
- QSqlQuery query;
-
- if (!query.exec("delete vdb.dbo.color_define where color = 'LightPink'"))
- {
- qDebug() << query.lastError();
- }
- }
-

- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include
- #include
- #include
- #include
-
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- }
-
- MainWindow::~MainWindow()
- {
- delete ui;
- }
-
-
- void MainWindow::on_query_btn_clicked()
- {
- QSqlQuery query;
-
- // 查找表中 color = LightPink 的数据
- query.prepare("select id, color, rgb, del_flag from vdb.dbo.color_define where color = :color");
-
- query.bindValue(":color","LightPink");
-
- query.exec();
-
- while(query.next())
- {
- int id = query.value(0).toInt();
- QString color = query.value(1).toString();
- QString rgb = query.value(2).toString();
- int del_flag = query.value(3).toInt();
- // 输出
- qDebug() << id << " " << color << " " << rgb << " " << del_flag;
- }
- }
-
-
- void MainWindow::on_insert_btn_clicked()
- {
- // 创建 QSqlQuery 对象
- QSqlQuery query;
-
- query.prepare("insert into vdb.dbo.color_define(color,rgb,del_flag) values(:color,:rgb,:del_flag)");
-
- query.bindValue(0,"LightPink");
- query.bindValue(1,"255,182,193");
- query.bindValue(2,0);
-
- if (!query.exec())
- {
- qDebug() << query.lastError();
- }
- }
-
-
- void MainWindow::on_update_btn_clicked()
- {
- // 创建 QSqlQuery 对象
- QSqlQuery query;
-
- query.prepare("update vdb.dbo.color_define set del_flag = 1 where color = :color");
-
- query.addBindValue("LightPink");
-
- if (!query.exec())
- {
- qDebug() << query.lastError();
- }
- }
-
-
- void MainWindow::on_delete_btn_clicked()
- {
- // 创建 QSqlQuery 对象
- QSqlQuery query;
-
- query.prepare("delete vdb.dbo.color_define where color = ?");
-
- //query.addBindValue("LightPink");
- query.bindValue(0,"LightPink");
-
- if (!query.exec())
- {
- qDebug() << query.lastError();
- }
- }
-

- void MainWindow::on_batch_btn_clicked()
- {
- // 创建 QSqlQuery 对象
- QSqlQuery query;
-
- query.prepare("insert into vdb.dbo.color_define(color,rgb,del_flag) values(?, ?, ?)");
-
- QVariantList colors;
- colors << "LightPink" << "OliveDrab" << "Tomato";
- query.addBindValue(colors);
-
- QVariantList rgbs;
- rgbs << "255,182,193" << "85,107,47" << "255,99,71";
- query.addBindValue(rgbs);
-
- QVariantList flags;
- flags << 0 << 0 << 0 ;
- query.addBindValue(flags);
-
- if (!query.execBatch())
- {
- qDebug() << query.lastError();
- }
-
- if(!query.exec("select top(100) * from vdb.dbo.color_define(nolock)")){
- qDebug() << query.lastError();
- }
-
- while(query.next())
- {
- int id = query.value(0).toInt();
- QString color = query.value(1).toString();
- QString rgb = query.value(2).toString();
- int del_flag = query.value(3).toInt();
- // 输出
- qDebug() << id << " " << color << " " << rgb << " " << del_flag;
- }
- }

- void MainWindow::on_delete_btn_clicked()
- {
- // transaction start
- QSqlDatabase::database().transaction();
-
- // 创建 QSqlQuery 对象
- QSqlQuery query;
-
- query.prepare("delete vdb.dbo.color_define where color = ?");
-
- query.addBindValue("LightPink");
- //query.bindValue(0,"LightPink");
-
- if (!query.exec())
- {
- qDebug() << query.lastError();
- }
-
- // transaction commit
- QSqlDatabase::database().commit();
- }