23:37:23 2019-08-12
嘗試用vs寫一個程序整合MySQL和QT
參考資料:https://blog.csdn.net/qq_35987486/article/details/84066304
https://www.cnblogs.com/Enceladus/p/11197971.html
先在vs中創建一個qt項目 然后手動寫MySQL
下面這個是手動配置 MySQL

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include<Windows.h> 4 #include<mysql.h> 5 #include<iostream> 6 #pragma comment(lib, "libmysql.lib") 7 8 int main(void) 9 { 10 MYSQL mysql, * sock; //聲明MySQL的句柄 11 const char* host = "127.0.0.1"; //因為是作為本機測試,所以填寫的是本地IP 12 const char* user = "root"; //這里改為你的用戶名,即連接MySQL的用戶名 13 const char* passwd = ""; //這里改為你的用戶密碼 14 const char* db = "text"; //這里改為你要連接的數據庫的名字,一個數據可能有幾張表 15 unsigned int port = 3306; //這是MySQL的服務器的端口,如果你沒有修改過的話就是3306。 16 const char* unix_socket = NULL; //unix_socket這是unix下的,我在Windows下,所以就把它設置為NULL 17 unsigned long client_flag = 0; //這個參數一般為0 18 19 const char* i_query = "select * from datastudent"; //查詢語句,從那個表中查詢,這里后面沒有; 20 21 22 MYSQL_RES* result; //保存結果集的 23 MYSQL_ROW row; //代表的是結果集中的一行 24 //my_ulonglong row; 25 26 mysql_init(&mysql); //連接之前必須使用這個函數來初始化 27 mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk"); 28 if ((sock = mysql_real_connect(&mysql, host, user, passwd, db, port, unix_socket, client_flag)) == NULL) //連接MySQL 29 { 30 printf("fail to connect mysql \n"); 31 fprintf(stderr, " %s\n", mysql_error(&mysql)); 32 exit(1); 33 } 34 else 35 { 36 fprintf(stderr, "connect ok!!\n"); 37 } 38 39 if (mysql_query(&mysql, i_query) != 0) //如果連接成功,則開始查詢 .成功返回0 40 { 41 fprintf(stderr, "fail to query!\n"); 42 exit(1); 43 } 44 else 45 { 46 if ((result = mysql_store_result(&mysql)) == NULL) //保存查詢的結果 47 { 48 fprintf(stderr, "fail to store result!\n"); 49 exit(1); 50 } 51 else 52 { 53 while ((row = mysql_fetch_row(result)) != NULL) //讀取結果集中的數據,返回的是下一行。因為保存結果集時,當前的游標在第一行【之前】 54 { 55 printf("name is %s\t", row[0]); //打印當前行的第一列的數據 56 printf("id is %s\t\n", row[1]); //打印當前行的第二列的數據 57 printf("math is %s\t\n", row[2]); 58 printf("province is %s\t\n", row[3]); 59 //row = mysql_num_row(result); 60 //printf("%lu\n", mysql_num_row(result)); 61 } 62 } 63 64 } 65 mysql_free_result(result); //釋放結果集 66 mysql_close(sock); //關閉連接 67 system("pause"); 68 exit(EXIT_SUCCESS); 69 70 }
把建的qt項目代碼和這個寫在一起就能跑了
我用QT designer畫好了界面
但MySQL的配置是在main函數中 qt改變界面上元素屬性是需要用 ui指針的
為了在main函數中使用 我把.h文件里的ui指針 改為了public 這樣可在main函數中訪問到ui指針
頭文件 .h
1 #pragma once 2 #include <QtWidgets/QWidget> 3 #include "ui_text.h" 4 5 class text : public QWidget 6 { 7 Q_OBJECT 8 9 public: 10 text(QWidget *parent = Q_NULLPTR); 11 Ui::textClass ui; 12 };
.cpp 沒有修改
main.cpp
1 #include "text.h" 2 #include <QtWidgets/QApplication> 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include<Windows.h> 6 #include<mysql.h> 7 #include<qtextcodec.h> 8 #pragma comment(lib, "libmysql.lib") 9 10 int main(int argc, char* argv[]) 11 { 12 MYSQL mysql, * sock; //聲明MySQL的句柄 13 const char* host = "127.0.0.1"; //因為是作為本機測試,所以填寫的是本地IP 14 const char* user = "root"; //這里改為你的用戶名,即連接MySQL的用戶名 15 const char* passwd = ""; //這里改為你的用戶密碼 16 const char* db = "text"; //這里改為你要連接的數據庫的名字,一個數據可能有幾張表 17 unsigned int port = 3306; //這是MySQL的服務器的端口,如果你沒有修改過的話就是3306。 18 const char* unix_socket = NULL; //unix_socket這是unix下的,我在Windows下,所以就把它設置為NULL 19 unsigned long client_flag = 0; //這個參數一般為0 20 21 const char* i_query = "select * from datastudent"; //查詢語句,從那個表中查詢,這里后面沒有; 22 23 24 MYSQL_RES* result; //保存結果集的 25 MYSQL_ROW row; //代表的是結果集中的一行 26 //my_ulonglong row; 27 QString name; 28 QString id; 29 QString score; 30 QString province; 31 mysql_init(&mysql); //連接之前必須使用這個函數來初始化 32 mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "UTF8"); 33 if ((sock = mysql_real_connect(&mysql, host, user, passwd, db, port, unix_socket, client_flag)) == NULL) //連接MySQL 34 { 35 printf("fail to connect mysql \n"); 36 fprintf(stderr, " %s\n", mysql_error(&mysql)); 37 exit(1); 38 } 39 else 40 { 41 fprintf(stderr, "connect ok!!\n"); 42 } 43 44 if (mysql_query(&mysql, i_query) != 0) //如果連接成功,則開始查詢 .成功返回0 45 { 46 fprintf(stderr, "fail to query!\n"); 47 exit(1); 48 } 49 else 50 { 51 if ((result = mysql_store_result(&mysql)) == NULL) //保存查詢的結果 52 { 53 fprintf(stderr, "fail to store result!\n"); 54 exit(1); 55 } 56 else 57 { 58 while ((row = mysql_fetch_row(result)) != NULL) //讀取結果集中的數據,返回的是下一行。因為保存結果集時,當前的游標在第一行【之前】 59 { 60 printf("name is %s\t", row[0]); //打印當前行的第一列的數據 61 printf("id is %s\t\n", row[1]); //打印當前行的第二列的數據 62 printf("math is %s\t\n", row[2]); 63 printf("province is %s\t\n", row[3]); 64 name = row[0]; 65 id = row[1]; 66 score = row[2]; 67 province = row[3]; 68 //row = mysql_num_row(result); 69 //printf("%lu\n", mysql_num_row(result)); 70 } 71 } 72 73 } 74 mysql_free_result(result); //釋放結果集 75 mysql_close(sock); //關閉連接 76 77 QApplication a(argc, argv); 78 text w; 79 w.ui.name->setText(name); 80 w.ui.id->setText(id); 81 w.ui.score->setText(score); 82 w.ui.province->setText(province); 83 w.show(); 84 return a.exec(); 85 86 }
字體為紅的地方是 修改MySQL編碼格式為 UTF-8
運行結果: