如何在qt5.11.1中連接mariadb數據庫

如何在qt5.11.1中連接mariadb數據庫

遊學電子科技,專注跨平臺軟硬件編程開發

環境: MariaDB數據庫 10.3.9版本32位

qt:32位qt5.11.1(mw編譯器32位)

很多朋友都是使用最流行的mysql數據庫進行測試和生產.但是網絡的消息好多,最值得我關注的一點就是mariadb數據庫源於mysql且性能優於mysql.沒啥說的,程序員追求的是技術,項目最終還是靠性能.因此決定使用Mariadb數據庫了.

什麼是MariaDB數據庫管理系統呢?"它是MySQL的一個分支,主要由開源社區在維護,採用GPL授權許可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能輕鬆成為MySQL的代替品。在存儲引擎方面,使用XtraDB(英語:XtraDB)來代替MySQL的InnoDB。 MariaDB由MySQL的創始人Michael Widenius(英語:Michael Widenius)主導開發,他早前曾以10億美元的價格,將自己創建的公司MySQL AB賣給了SUN,此後,隨著SUN被甲骨文收購,MySQL的所有權也落入Oracle的手中。MariaDB名稱來自Michael Widenius的女兒Maria的名字。

MariaDB基於事務的Maria存儲引擎,替換了MySQL的MyISAM存儲引擎,它使用了Percona的 XtraDB,InnoDB的變體,分支的開發者希望提供訪問即將到來的MySQL 5.4 InnoDB性能。這個版本還包括了 PrimeBase XT (PBXT) 和 FederatedX存儲引擎。"

一句話總結:MariaDB數據庫是mysql的替代者,性能優於及兼容mysql.

一開始是phpstudy集成環境,它的數據庫是mysql,所以在安裝phpstudy後,自己下載了mariadb數據庫進行安裝.心想應該可以不用改動qt代碼的前提下正常連接db數據庫吧.

附上mariadb數據庫的下載鏈接:https://downloads.mariadb.org/mariadb/10.3.9/ 裡邊有msi的安裝包.測試使用的是10.3.9版本32位

安裝到c盤後, 一定要把32位的mariadb10.3目錄下的lib下的libmariadb.dll重命名為libmysql.dll文件複製到qt界面側邊欄"項目"裡設置的文件夾下.

如何在qt5.11.1中連接mariadb數據庫

qt界面側邊欄"項目"裡設置的文件夾

如何在qt5.11.1中連接mariadb數據庫

把32位的mariadb10.3目錄下的lib下的libmariadb.dll重命名為libmysq

此時運行已經寫好數據庫連接代碼的qt項目,啟動HeidiSQL打開db數據庫.即可正常創建數據庫和表.創建的語句語法都與mysql同.

部分連接數據庫的項目代碼:

注意.在qt的pro文件內加入: QT += sql

//一定要把32位的mariadb10.3目錄下的lib下的libmariadb.dll重命名為libmysql.dll文件複製到qt界面側邊欄"項目"裡設置的文件夾下.
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
// db->addDatabase("QMYSQL");//指定使用mysql數據庫
db.setHostName("localhost");//本機名或者127.0.0.1
//db->setDatabaseName("zxl");//連接到已有的數據庫名.下邊接著可以創建表也可以直接創建數據庫.
db.setPort(3306);
db.setUserName("root");//登錄賬戶
db.setPassword("root");//密碼
if(db.open())//數據庫打開正常
{
//MySQL創建數據庫設置字符編碼
db.exec("CREATE DATABASE ZXL DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci");
qDebug()<<db.lasterror> db.exec("use ZXL");//指定數據庫然後才可以創建表
qDebug()<<db.lasterror> //創建數據表格SFYTJ. 同時定義字段.多次創建表格執行不會重新創建和覆蓋表,只會提示一個異常.
db.exec( "CREATE TABLE SFYTJ( id SERIAL PRIMARY KEY, 時間 TEXT,設備地址 TEXT,用戶 TEXT,手機 TEXT , 溫度1 TEXT, 溫度2 TEXT , 溫度3 TEXT , 溫度4 TEXT , 溫度5 TEXT , 溫度6 TEXT , 溫度7 TEXT , 溫度8 TEXT , 溼度1 TEXT ,溼度2 TEXT ,溼度3 TEXT ,溼度4 TEXT ,溼度5 TEXT ,溼度6 TEXT ,溼度7 TEXT ,溼度8 TEXT ,按鈕1 TEXT,按鈕2 TEXT, 按鈕3 TEXT, 按鈕4 TEXT, 按鈕5 TEXT, 按鈕6 TEXT,按鈕7 TEXT,按鈕8 TEXT,按鈕9 TEXT,按鈕10 TEXT,按鈕11 TEXT,按鈕12 TEXT,急停按鈕 TEXT,模式按鈕 TEXT,電磁閥1 TEXT, 電磁閥2 TEXT,電磁閥3 TEXT,電磁閥4 TEXT,電磁閥5 TEXT,電磁閥6 TEXT,電磁閥7 TEXT,電磁閥8 TEXT,電磁閥9 TEXT,電磁閥10 TEXT,電磁閥11 TEXT,電磁閥12 TEXT) ");
//創建數據表格area.
db.exec( "CREATE TABLE area( id SERIAL PRIMARY KEY,手機 TEXT ,用戶名 TEXT,設備地址 TEXT,備註 TEXT)");
if(db.lastError().isValid())//0為無錯誤
QMessageBox::information(NULL, tr("異常通知"), tr("數據表創建異常"), QMessageBox::Yes);
else

QMessageBox::information(NULL, tr("成功通知"),tr("數據表創建成功"), QMessageBox::Yes);
}
else//數據庫未打開
QMessageBox::information(NULL, tr("異常通知"),tr("數據庫打開異常"), QMessageBox::Yes);
/<db.lasterror>/<db.lasterror>

最後,如果大家喜歡跨平臺編程開發,請關注我.我會定時更新技術文章與大家分享交流學習.qq:761153454 qt中國群:218967017 / 218967042

qt中國興趣部落 https://buluo.qq.com/mobile/detail.html?&&_wv=1027&bid=17863&pid=1153530-1536020230&source=buluoadmin&from=buluoadmin


分享到:


相關文章: