可能是全網(wǎng)最詳細的Qt連接MySQL數(shù)據(jù)庫教程
被Qt連接數(shù)據(jù)庫折磨了三天之后終于連接成功了,記錄一下希望對看到的人有所幫助。
1.直接通過MySQL的驅(qū)動加載數(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(); }
當然要在.pro文件中添加一行引入
QT += sql
如果顯示:
那么恭喜你太幸運了,你已經(jīng)成功連接MySQL數(shù)據(jù)庫了,快去使用吧。
如果顯示:
也不要灰心接著往下看我的電腦就一直顯示失敗
沒有QMYSQL的驅(qū)動,這是怎么回事呢?
2)解決QMYSQL driver not loaded
Qt連接到mysql的過程:app->Qt的數(shù)據(jù)庫插件->mysql動態(tài)庫->mysql服務。
Qt的數(shù)據(jù)庫插件位于“C:\Qt(安裝路徑)(Qt版本)\版本號(庫)\mingw49_32(編譯器)\plugins(插件)\sqldrivers(數(shù)據(jù)庫插件)” 下的qsqlmysqld.dll(debug版本用) qsqlmysql.dll(release版本用).
mysql動態(tài)庫位于“C:\Qt\MySQLServer5.5(mysql安裝路徑)\lib”下的“libmysql.dll“
i:將mysql下的ilbmysql.lib和libmysql.dll復制到Qt的bin目錄下
ii:查看自己的qt中有沒有qsqlmysqld.dll(debug版本用) qsqlmysql.dll(release版本用)
如果都有:
運行一下代碼:
//輸出可用數(shù)據(jù)庫 qDebug()<<"available drivers:"; QStringList drivers = QSqlDatabase::drivers(); foreach(QString driver, drivers) qDebug()<<driver;
如果輸出中含有MySQL,那么恭喜你說明你的qt有MySQL驅(qū)動了:
如果沒有,不要灰心,因為我的就是一直沒有MySQL驅(qū)動:
大家可以重新下載一些不同的版本嘗試一下,我嘗試了無數(shù)次后不得不放棄,就選擇了另一條路,通過ODBC連接MySQL數(shù)據(jù)庫。
2.通過ODBC連接MySQL數(shù)據(jù)庫
1)官方解釋:
ODBC(Open Database Connectivity,開放數(shù)據(jù)庫互連)提供了一種標準的API(應用程序編程接口)方法來訪問數(shù)據(jù)庫管理系統(tǒng)(DBMS)。這些API利用SQL來完成其大部分任務。ODBC本身也提供了對SQL語言的支持,用戶可以直接將SQL語句送給ODBC。ODBC的設(shè)計者們努力使它具有最大的獨立性和開放性:與具體的編程語言無關(guān),與具體的數(shù)據(jù)庫系統(tǒng)無關(guān),與具體的操作系統(tǒng)無關(guān)。
簡單的說就是我的qt中含有ODBC的驅(qū)動:
所以利用ODBC去使用MySQL的數(shù)據(jù)庫.
2)下載ODBC
選擇和qt編譯器相同的字節(jié)比如我的qt使用的是64字節(jié)的
下載的ODBC選擇的也是64字節(jié)的,選擇MSI類型的直接安裝就可以
下載一直點擊next即可:
查看點擊小娜,搜索ODBC,
3)連接MySQL數(shù)據(jù)庫
i添加MySQL的DSN
紅色的可以隨便填,是自己對于ODBC驅(qū)動的描述,粉色的是MySQL的用戶名和密碼,數(shù)據(jù)庫選擇你在MySQL中創(chuàng)建的數(shù)據(jù)庫名字即可.
點擊test如果出現(xiàn)下圖說明連接成功
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(); }
運行程序:
大功告成
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; }
總結(jié)
到此這篇關(guān)于Qt連接MySQL數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)Qt連接MySQL數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++利用代理模式實現(xiàn)遠程代理,虛擬代理和保護代理
今天給大家簡單介紹代理模式,一個很簡單的設(shè)計模式,旨在不改變原對象的情況下通過代理對象來控制對原對象的訪問。代理模式根據(jù)具體情況還可以分為遠程代理、虛擬代理、保護代理等,下面來介紹一下2023-04-04