在上章學習了42.QT-操作SQLite數據庫后,發現MySQL和SQLite的語句都大致相同,所以本章只測試MySQL是否能使用
MySQL安裝參考鏈接:https://blog.csdn.net/qq_38455201/article/details/83419450
1.由於QT版本是32位,所以MySQL安裝也得是32位

2.MySQL安裝
下載地址https://dev.mysql.com/downloads/mysql/5.7.html#downloads,選擇32位的:

下載完成后解壓到: D:\MySQL5.7_win32
然后配置Path環境變量
新增變量名:

然后在Path變量里添加路徑:

- %MYSQL_HOME%:表示變量名,等價於D:\MySQL5.7_win32\mysql-5.7.26-win32
配置文件
首先在D:\MySQL5.7_win32\mysql-5.7.26-win32里創建data文件夾,用來mySQL存儲數據.
然后在D:\MySQL5.7_win32\mysql-5.7.26-win32里創建my.ini文件(在linux下則為my.cnf):
[mysql] # 設置mysql客戶端默認字符集 default-character-set=utf8 # 數據庫服務端配置項 [mysqld] # 設置3306端口 port = 3306 # 設置MYSQL的安裝目錄 basedir= D:\\MySQL5.7_win32\\mysql-5.7.26-win32 # 設置MYSQL數據庫的數據的存放目錄 datadir=D:\\MySQL5.7_win32\\mysql-5.7.26-win32\\data # 允許最大連接數 max_connections=200 # 服務端使用的字符集設置為utf8 character-set-server=utf8 # 創建新表時將使用的默認存儲引擎 # default-storage-engine=INNODB #設置模式 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES # skip-grant-tables跳過密碼驗證,一般忘記密碼,才是用它,重新改密碼 #skip-grant-tables [WindowsMySQLServer] Server= D:\\MySQL5.7_win32\\mysql-5.7.26-win32\\bin\\mysqld.exe
安裝MySQL服務以及初始化
打開CMD輸入:
mysqld install //安裝SQL后台服務程序(mysqld),mysqld用來實現讓客戶端通過連接服務器來訪問數據庫 mysqld --initlialize //初始化mysqld net start mysql //啟動MySQL

更改密碼
首先找到初始密碼,密碼位於data文件夾*.err文件里:

打開,找到密碼為N0aeT3lp.tzy:
![]()
繼續在CMD中輸入:
mysql -u root –p //-u表示輸入用戶名,-p表示輸入密碼,按下回車后則會要求輸入密碼N0aeT3lp.tzy alter user root@localhost identified by '123456'; //改為123456

修改密碼也可以輸入:
set password for root@localhost = password('123'); //修改密碼為123

使用navicat管理數據庫工具連接數據庫
使用navicat工具可以方便操作數據庫,下載后,我們通過ip地址訪問時,發現打印如下所示:

打開CMD配置
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123'; //修改,允許所有IP地址,通過root和123賬號密碼來訪問
flush privileges; //使修改立即生效
如下圖所示:

然后再次通過ip地址訪問,發現OK:

3.接下來開始使用QT測試(使用QT5.7版本)
連接MySQL發現打印:

因為缺少驅動文件libmysql.dll,該文件位於: D:\MySQL5.7_win32\mysql-5.7.26-win32\lib
方法1:
將libmysql.dll復制到Qt5.7.1\5.7\mingw53_32\bin目錄下
方法2:
將libmysql.dll復制到debug或者release下
開始測試
1)首先創建一個students數據庫:

2)寫QT代碼
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("192.168.0.100"); //如果填入localhost,則表示鏈接本地的數據庫 db.setDatabaseName("students"); //要連接的數據庫名 db.setUserName("root"); db.setPassword("sql"); db.setPort(3306); if(db.open()) {
QSqlQuery query; query.exec("DROP TABLE students"); //刪除名為students的表 query.exec("CREATE TABLE students(" "id INT NOT NULL AUTO_INCREMENT," "name VARCHAR(20) NOT NULL," "sroce INT NOT NULL," "class VARCHAR(20) NOT NULL," "PRIMARY KEY (id) )ENGINE=InnoDB DEFAULT CHARSET=utf8;"); //重新創建一個students表,標題分別為id、name、score、class query.exec("INSERT INTO students(name,sroce,class) VALUES ('小a', 85, '初2-1班')"); query.exec("INSERT INTO students(name,sroce,class) VALUES ('小b', 15, '初2-2班')"); query.exec("INSERT INTO students(name,sroce,class) VALUES ('小c', 35, '初2-3班')"); }
運行結束后,打印數據表是否有數據:

