標籤:link 就是 字元集 _id 點擊 屬性 資料存放區 win white
這裡不知道會不會有人是真的新手 新新手 不知道怎麼 如何建立一個MFC 工程 應該不會吧? 就是 開啟VS 建立項目-MFC -MFC工程-點基於對話方塊 -和在靜態庫中使用 然後點擊完成
注意啦 命名 都用英文 源碼在這https://pan.baidu.com/s/1chRMPK
工具:vs2013,mysql5.7.6
作業系統:win64位 注意啦 我這裡是VS2013 你們要是拷貝我的工程在其他版本上可能不能用 這時候只要點擊項目 - 屬性-配置屬性 -右邊的工具集 改成你們自己的版本 就行了
還有 我這裡是 64位的 你們有可能項目是 WIN 32 的 要改 項目 -屬性-右上的 組態管理員-裡面的平台改成X64 不然就會出現一些 什麼什麼變數 在什麼地方引用 之類的錯誤
設定一些引用檔案的環境變數,基本跟opencv配置過程差不多 如果配置過OpenCV的就知道了
點擊項目->屬性---改成所有配置--配置->vc++目錄
然後“include目錄”(包含目錄)那把“C:\ProgramFiles\MySQL 5.7.6\include”給加進來
再然後“lib目錄”(庫目錄)那裡把“C:\ProgramFiles\MySQL 5.7.6\lib”和“C:\ProgramFiles\MySQL 5.7.6\lib\debug”也一起加進來。以上三個檔案在mysql 的安裝目錄下(!!!注意啦 這是我MYSQL的安裝目錄 你們看自己的)
最後在加一個 項目-屬性-連接器-常規 -附加依賴項 裡 加 libmysql.lib 然後在把這個MYSQL的檔案 拷貝到自己MFC工程的DEBUG 或者代碼放置的地方 //這裡如果不加的話 就要在工程裡面加上
#pragma comment (lib, "libmysql.lib") 同樣還是要把檔案拷貝到工程裡面去
#pragma comment (lib, "mysqlclient.lib")
還有可能會因為沒有加這個而報錯 這個是MFC 經常的錯誤 #define _CRT_SECURE_NO_DEPRECATE 這個要加在stafx.h裡最上面 也就是 所有標頭檔還沒有載入的時候就要加上去
好了 下面開始進入正題:
第一步: 除了代碼給我們的 標頭檔 我們必要的標頭檔也是有要加的:
- #include <stdio.h>
- #include <string.h>
- #include <algorithm>
- #include <iostream>
- #include "winsock.h"
- #include "mysql.h"
- #include “Resource.h”
mysql.h 不能開啟 就是 沒有配置好 檢查一下 再不行就 拷貝一份到工程裡面。
第二步:
先上代碼: 這裡點擊我對話方塊BUTTON 跳轉出來的函數
void CMYSQLLLINKDlg::OnBnClickedButton1()
{
// TODO: 在此添加控制項通知處理常式代碼
MYSQL m_sqlCon;
mysql_init(&m_sqlCon);
// localhost:伺服器 root/123456為帳號密碼 testa為資料庫名 3306為連接埠
if (!mysql_real_connect(&m_sqlCon, "localhost", "root", "123456", "testa", 3306, NULL, 0))
{
AfxMessageBox(_T("訪問資料庫失敗!"));
CString e = mysql_error(&m_sqlCon);//需要將項目屬性中字元集修改為“使用多位元組字元集”或“未設定”
MessageBox(e);
return;
}
else
{
AfxMessageBox(_T("成功!"));
mysql_query(&m_sqlCon, "SET NAMES ‘GB2312‘");//解決從資料庫中讀取資料後漢字亂碼顯示的問題 也可以是UTF-8
CString name, id, student_name, student_id, student_major;
//LPSTR sql = (LPSTR)malloc(200); 兩種格式都可以 我喜歡用sql.Format這種
CString sql;
GetDlgItemText(IDC_EDIT1, name);
GetDlgItemText(IDC_EDIT2, id);
sql.Format(TEXT("select student_name,student_id,student_majo from users where father_id=‘%s‘and father_name=‘%s‘;"), id, name);
//sprintf(sql, "select student_name,student_id,student_majo from users where father_id=‘%s‘and father_name=‘%s‘;", id1, name1);
AfxMessageBox(sql);//看看SQL語句
mysql_query(&m_sqlCon, sql);
MYSQL_RES *res;//定義擷取結果集
MYSQL_ROW row;//擷取結果集中行資料
res = mysql_store_result(&m_sqlCon);//取得查詢結果,儲存查詢到的資料到res
int num = 0;
//這個函數每次只能擷取一行資料 不過每次擷取完res指標會後移 所以while迴圈就可以不斷的擷取下面的資料 不過要注意儲存問題
if (row = mysql_fetch_row(res))
{
CString num1 = row[0], num2 = row[1], num3 = row[2];
student_name = num1;
student_id = num2;
student_major = num3;
SetDlgItemText(IDC_EDIT3, student_name);
SetDlgItemText(IDC_EDIT4, student_id);
SetDlgItemText(IDC_EDIT5, student_major);
}
else
{
CString retu(_T("輸入資訊有誤!"));
SetDlgItemText(IDC_EDIT3, retu);
}
}
}
好吧 一下上代碼 可能有點亂 或者難以理解 那我們一個一個來看:
MYSQL m_sqlCon;mysql_init(&m_sqlCon);
這個就是 建立一個MYSQL的執行個體對象 然後對他進行初始化 還有其他寫法:
MYSQL *sock; sock=mysql_init(0);
都是差不多的意思。
下面就是串連資料庫和判斷: // localhost:伺服器 root/123456為帳號密碼 testa為資料庫名 3306為連接埠 &m_sqlCon這個就不用說了吧
!!!注意了整個項目 我用的都是 多位元組 需要在自己項目屬性那裡更改 沒有多位元組庫 的可以 去網上下載一個 安裝到VS裡
if (!mysql_real_connect(&m_sqlCon, "localhost", "root", "123456", "testa", 3306, NULL, 0)){AfxMessageBox(_T("訪問資料庫失敗!"));CString e = mysql_error(&m_sqlCon);//需要將項目屬性中字元集修改為“使用多位元組字元集”或“未設定” MessageBox(e);return;}else{AfxMessageBox(_T("成功!"));mysql_query(&m_sqlCon, "SET NAMES ‘GB2312‘");//解決從資料庫中讀取資料後漢字亂碼顯示的問題 也可以是UTF-8 }
好了 上面這些就是 串連資料庫的 簡單步驟了 。接下來我們來一個小項目玩玩。。。。。
第三步 :
上面這個就是一個簡單的實現 從 MFC 到資料庫的 查詢學生資訊的小介面。
下面 就是我資料庫表格 users 放在 一個testa 的資料庫裡面 如果資料庫安裝不會的可以參照我的另外一篇安裝資料庫的部落格http://www.cnblogs.com/DOMLX/p/8094659.html
看代碼解釋:
CString name, id, student_name, student_id, student_major;
//LPSTR sql = (LPSTR)malloc(200); 兩種格式都可以 我喜歡用sql.Format這種
CString sql;
GetDlgItemText(IDC_EDIT1, name);
GetDlgItemText(IDC_EDIT2, id);
sql.Format(TEXT("select student_name,student_id,student_majo from users where father_id=‘%s‘and father_name=‘%s‘;"), id, name);
//sprintf(sql, "select student_name,student_id,student_majo from users where father_id=‘%s‘and father_name=‘%s‘;", id1, name1);
AfxMessageBox(sql);//看看SQL語句
mysql_query(&m_sqlCon, sql);
MYSQL_RES *res;//定義擷取結果集
MYSQL_ROW row;//擷取結果集中行資料
res = mysql_store_result(&m_sqlCon);//取得查詢結果,儲存查詢到的資料到res
int num = 0;
//這個函數每次只能擷取一行資料返回的是個行數組 不過每次擷取完res指標會後移 所以while迴圈就可以不斷的擷取下面的資料 不過要注意儲存問題
if (row = mysql_fetch_row(res))
{
CString num1 = row[0], num2 = row[1], num3 = row[2];//將數組中的資料存放區
student_name = num1;
student_id = num2;
student_major = num3;
SetDlgItemText(IDC_EDIT3, student_name);//將資料都顯示到對話方塊中的控制項中去
SetDlgItemText(IDC_EDIT4, student_id);
SetDlgItemText(IDC_EDIT5, student_major);
}
else
{
CString retu(_T("輸入資訊有誤!"));
SetDlgItemText(IDC_EDIT3, retu);
}
完成上面這些 加上你的資料庫已經開啟 並且 建立好了 表 和存入了資料 就可以開始進行查詢了。
基於C++ MFC 串連資料庫 小應用 小項目淺析展示