本文主要讲述QT使用ODBC连接MySQL数据库的过程。
第一步,下载连接工具
链接如下:https://cdn.mysql.com//Downloads/Connector-ODBC/8.0/mysql-connector-odbc-8.0.28-winx64.msi
下完完成后默认安装即可,安装完成后在电脑的管理工具下可以找到
打开后如下所示,新安装的没有名称为2和3的两条记录。按照箭头所示,点击添加。
点击添加后如下所示,选择箭头所示,然后点击完成。
点击完成后,如下所示
需要依次填写,其中Data Source Name在使用QT连接ODBC时会用到,此处我写了3,自己取个名字即可。对于Description没有要求,随便写个默认的描述就行。最下面的Database要选择你自己电脑中的数据库,比如我的数据库式binshop,我就选择binshop,选择数据库后点击旁边的Test,可以测试时候连接成功。
本文测试用到的sql文件一并放在下载连接里面,需要的可以直接下载。完成后如下所示。多了一条名称为3的描述
本文的数据库表描述如下
QT的代码结构如下:
在untitled.pro里面添加如下代码,相比于原来只添加了sql三个字母,其它全部默认。
QT += core gui sql
widget.h文件如下
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
#include <QStringList>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlDatabase>
#include <QSqlQueryModel>
#include <QSqlRecord>
#include <QString>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void QueryData(QSqlDatabase db);
private slots:
void on_pushButton_clicked();
void on_tableView_doubleClicked(const QModelIndex &index);
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp如下
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::QueryData(QSqlDatabase db)
{
// 查询数据库中所有表的名称
QStringList tables = db.tables();
foreach(QString table, tables)
qDebug()<<table;
// ODBC查询数据
QSqlQuery result = db.exec("select * from commodity");
while(result.next())
{
qDebug()<<"user_id:"<<result.value("ID").toInt();
qDebug()<<"name:"<<result.value("name").toString();
qDebug()<<"password:"<<result.value("type").toString();
qDebug()<<"score:"<<result.value("price").toInt()<<endl;
}
// 将数据库的内容显示到tableview控件中
static QSqlQueryModel *mode= new QSqlQueryModel(ui->tableView);
mode->setQuery("select * from commodity");
mode->setHeaderData(0,Qt::Horizontal,tr("ID"));
mode->setHeaderData(1, Qt::Horizontal, tr("name"));
mode->setHeaderData(2,Qt::Horizontal,tr("type"));
mode->setHeaderData(3, Qt::Horizontal, tr("price"));
ui->tableView->setModel(mode);
}
// 查询按钮
void Widget::on_pushButton_clicked()
{
// 通过ODBC连接MYSQL数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("127.0.0.1");
db.setPort(3306);
// 使用ODBC连接时自己设置的名字(data source name)
db.setDatabaseName("3");
db.setUserName("root");
db.setPassword("123456");
bool ok = db.open();
// 判断数据库是否连接成功
if (ok){
// QMessageBox::information(this, "infor", "success");
}
else {
// QMessageBox::information(this, "infor", "open failed");
qDebug()<<"error open database because"<<db.lastError().text();
}
//db.exec("insert commodity values('005','显卡','RTX3090',9500)");
// 指定条件查询
QSqlQuery query("SELECT * FROM `commodity` where price > 8000",db);
QSqlRecord rec = query.record();
while(query.next())
{
rec = query.record();
int id = rec.indexOf("ID");
QString ID = query.value(id).toString();
qDebug()<<"ID"<<ID;
int na = rec.indexOf("name");
QString name = query.value(na).toString();
qDebug()<<"name"<<name;
}
QueryData(db);
}
// 给tableview添加双击事件。
void Widget::on_tableView_doubleClicked(const QModelIndex &index)
{
int row=index.row();
int col=index.column();
// qDebug()<<row;
// qDebug()<<col;
QString id = ui->tableView->model()->index(row,col).data().toString();
qDebug()<<id;
}
main.cpp如下
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
UI文件如下
只增加了一个按钮和一个tableview。
,程序运行的结果如下
整个项目的下载链接如下
https://download.csdn.net/download/weixin_43552197/84995121