vs整合MySQL和QT


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 }
View Code

 

 把建的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

 

 運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM