提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔
原文鏈接:https://blog.csdn.net/joey_ro/article/details/105411135
被Qt連接數(shù)據(jù)庫折磨了三天之后終于連接成功了,記錄一下希望對(duì)看到的人有所幫助。
1.直接通過MySQL的驅(qū)動(dòng)加載數(shù)據(jù)庫
1)所需代碼
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setPort(3306);
db.setDatabaseName("數(shù)據(jù)庫名");
db.setUserName("用戶名");
db.setPassword("密碼");
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();
}
當(dāng)然要在.pro文件中添加一行引入
QT += sql
如果顯示:
那么恭喜你太幸運(yùn)了,你已經(jīng)成功連接MySQL數(shù)據(jù)庫了,快去使用吧。
如果顯示:
也不要灰心接著往下看我的電腦就一直顯示失敗
沒有QMYSQL的驅(qū)動(dòng),這是怎么回事呢?
2)解決QMYSQL driver not loaded
Qt連接到mysql的過程:app->Qt的數(shù)據(jù)庫插件->mysql動(dòng)態(tài)庫->mysql服務(wù)。
Qt的數(shù)據(jù)庫插件位于“C:\Qt(安裝路徑)(Qt版本)\版本號(hào)(庫)\mingw49_32(編譯器)\plugins(插件)\sqldrivers(數(shù)據(jù)庫插件)” 下的qsqlmysqld.dll(debug版本用) qsqlmysql.dll(release版本用).
mysql動(dòng)態(tài)庫位于“C:\Qt\MySQLServer5.5(mysql安裝路徑)\lib”下的“l(fā)ibmysql.dll“
i:將mysql下的ilbmysql.lib和libmysql.dll復(fù)制到Qt的bin目錄下
ii:查看自己的qt中有沒有qsqlmysqld.dll(debug版本用) qsqlmysql.dll(release版本用)
如果都有:
運(yùn)行一下代碼:
//輸出可用數(shù)據(jù)庫
qDebug()<<"available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug()<<driver;
如果輸出中含有MySQL,那么恭喜你說明你的qt有MySQL驅(qū)動(dòng)了:
如果沒有,不要灰心,因?yàn)槲业木褪且恢睕]有MySQL驅(qū)動(dòng):
大家可以重新下載一些不同的版本嘗試一下,我嘗試了無數(shù)次后不得不放棄,就選擇了另一條路,通過ODBC連接MySQL數(shù)據(jù)庫。
2.通過ODBC連接MySQL數(shù)據(jù)庫
1)官方解釋
ODBC(Open Database Connectivity,開放數(shù)據(jù)庫互連)提供了一種標(biāo)準(zhǔn)的API(應(yīng)用程序編程接口)方法來訪問數(shù)據(jù)庫管理系統(tǒng)(DBMS)。這些API利用SQL來完成其大部分任務(wù)。ODBC本身也提供了對(duì)SQL語言的支持,用戶可以直接將SQL語句送給ODBC。ODBC的設(shè)計(jì)者們努力使它具有最大的獨(dú)立性和開放性:與具體的編程語言無關(guān),與具體的數(shù)據(jù)庫系統(tǒng)無關(guān),與具體的操作系統(tǒng)無關(guān)。
簡單的說就是我的qt中含有ODBC的驅(qū)動(dòng):
所以利用ODBC去使用MySQL的數(shù)據(jù)庫。
2)下載ODBC
官網(wǎng)
https://dev.mysql.com/downloads/connector/odbc/
選擇和qt編譯器相同的字節(jié)比如我的qt使用的是64字節(jié)的
下載的ODBC選擇的也是64字節(jié)的,選擇MSI類型的直接安裝就可以
下載一直點(diǎn)擊next即可:
查看點(diǎn)擊小娜,搜索ODBC,
3)連接MySQL數(shù)據(jù)庫
i添加MySQL的DSN
紅色的可以隨便填,是自己對(duì)于ODBC驅(qū)動(dòng)的描述,粉色的是MySQL的用戶名和密碼,數(shù)據(jù)庫選擇你在MySQL中創(chuàng)建的數(shù)據(jù)庫名字即可。
點(diǎn)擊test如果出現(xiàn)下圖說明連接成功
需要依次填寫,其中Data Source Name在使用QT連接ODBC時(shí)會(huì)用到,此處我寫了3,自己取個(gè)名字即可。對(duì)于Description沒有要求,隨便寫個(gè)默認(rèn)的描述就行。最下面的Database要選擇你自己電腦中的數(shù)據(jù)庫,比如我的數(shù)據(jù)庫式binshop,我就選擇binshop,選擇數(shù)據(jù)庫后點(diǎn)擊旁邊的Test,可以測試時(shí)候連接成功。
本文測試用到的sql文件一并放在下載連接里面,需要的可以直接下載。完成后如下所示。多了一條名稱為3的描述
原文鏈接:https://blog.csdn.net/weixin_43552197/article/details/123550924
4)qt通過ODBC連接MySQL
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("127.0.0.1");
db.setPort(3306);
db.setDatabaseName("是你在ODBC中創(chuàng)建的Data source?。睿幔恚?);
db.setUserName("用戶名");
db.setPassword("密碼");
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();
}
運(yùn)行程序:
大功告成
3.qt通過ODBC操作數(shù)據(jù)庫
1)查詢數(shù)據(jù)
代碼:
//查詢數(shù)據(jù)庫中所有表的名稱
QStringList tables = db.tables();
foreach(QString table, tables)
qDebug()<<table;
//ODBC查詢數(shù)據(jù)
QSqlQuery result = db.exec(" select * from users");
while(result.next()){
qDebug()<<"user_id:"<<result.value("user_id").toInt();
qDebug()<<"name:"<<result.value("name").toString();
qDebug()<<"password:"<<result.value("password").toString();
qDebug()<<"score:"<<result.value("score").toInt()<<endl;
}
2)插入數(shù)據(jù)
//ODBC插入數(shù)據(jù)
result.clear();
bool result_successed = result.exec("insert into users(name,password,score) values ( 'joe2y','123456',0)");
if(result_successed){
qDebug()<<"插入成功!";
}else {
qDebug()<<"插入失敗!";
}
3)更新數(shù)據(jù)
//ODBC更新數(shù)據(jù)
result.clear();
bool result_successed2 = result.exec("update users set score=10 where user_id=2");
if(result_successed2){
qDebug()<<"更新成功!"<<endl;
}else{
qDebug()<<"更新失??!"<<endl;
}
Win10安裝MySQL出現(xiàn)錯(cuò)誤2503 2502 的解決辦法
原文鏈接:https://blog.csdn.net/qq_43422918/article/details/116202995
-
打開任務(wù)管理器:Ctrl+Alt+Del。
-
點(diǎn)擊任務(wù)管理器左上角的文件按鈕:
-
再點(diǎn)擊 運(yùn)行新任務(wù)(n)按鈕。
-
手動(dòng)輸入所下載的MySQL安裝文件的地址+文件名。比如我放在D:\MySQL文件夾里,文件名為:mysql-installer-web-community-5.7.21.0.msi,就輸入:D:\MySQL\mysql-installer-web-community-5.7.21.0.msi,務(wù)必要打上 下面的勾。
-
點(diǎn)擊確定進(jìn)行安裝,祝安裝成功!
QT使用ODBC連接MySQL
https://blog.csdn.net/weixin_43552197/article/details/123550924?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168247337716800180645494%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=168247337716800180645494&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-2-123550924-null-null.142v86control,239v2insert_chatgpt&utm_term=qt%20odbc%E8%BF%9E%E6%8E%A5mysql&spm=1018.2226.3001.4187
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)
{
// 查詢數(shù)據(jù)庫中所有表的名稱
QStringList tables = db.tables();
foreach(QString table, tables)
qDebug()<<table;
// ODBC查詢數(shù)據(jù)
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;
}
// 將數(shù)據(jù)庫的內(nèi)容顯示到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數(shù)據(jù)庫
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("127.0.0.1");
db.setPort(3306);
// 使用ODBC連接時(shí)自己設(shè)置的名字(data source name)
db.setDatabaseName("3");
db.setUserName("root");
db.setPassword("123456");
bool ok = db.open();
// 判斷數(shù)據(jù)庫是否連接成功
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如下文章來源:http://www.zghlxwxcb.cn/news/detail-811202.html
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
UI文件如下
只增加了一個(gè)按鈕和一個(gè)tableview。
,程序運(yùn)行的結(jié)果如下文章來源地址http://www.zghlxwxcb.cn/news/detail-811202.html
到了這里,關(guān)于Qt連接MySQL數(shù)據(jù)庫最詳細(xì)的教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!