1. 程式人生 > >MFC基於vs2103呼叫mysql資料庫

MFC基於vs2103呼叫mysql資料庫

          首先安裝mysql,百度搜索到官網下載,下載好後按預設設定安裝好,百度裡面一大堆安裝教程,設定好環境。在此建議如果對資料庫完全不懂得話,建議先花2個小時玩玩mysql自帶的MySQL Workbench 8.0 CE(我這裡安裝是新版8.0的版本)。到這裡你要先在工作管理員裡面把服務開啟,不然是沒法繼續後續操作的,步驟:工作管理員—服務—找到MySQL80或者有的人是MySQL—右鍵:啟動服務。然後開啟Workbench ,在裡面建立資料庫,然後建立一張表格,隨便增刪改查的玩一玩,看看用人家官方給的工具能否對資料庫進行一些基本操作。

         接下來就是開啟vs2013,新建個MFC工程,基於對話方塊的,然後進行設定:

(1)專案—>屬性—>配置屬性—>C/C++—>附加包含目錄:在附加包含目錄中新增C:\Program Files\MySQL\MySQL Server 8.0\include(就是安裝MySql下的include資料夾,將標頭檔案包含)

(2)專案—>屬性—>配置屬性—>聯結器—>常規—>附加庫目錄:C:\Program Files\MySQL\MySQL Server 8.0\lib(就是安裝MySql下的lib資料夾,將庫檔案包含)

(3)聯結器—>輸入—>附加依賴項:新增libmysql.lib(若此處不新增,需要最後在標頭檔案中新增 #pragmacomment(lib,"libmysql.lib") )。

(4)編譯通過之後,執行還要將C:\Program Files\MySQL\MySQL Server 8.0\lib(安裝MySql下的lib資料夾)中的libmysql.dll拷到專案中的Debug資料夾中(或者拷到C:\Windows\System32中)。

 (5)如果你下載的MySQL資料庫是32位的,那就無所謂;如果你下載的是64位的,那麼你還要改一下你的專案配置:點選“專案”—“屬性”—右上角有個“配置管理器”—“活動平臺解決方案”—“新建”—選擇“x64”—“確定”。

(6)設定字符集:點選“專案”—“屬性”—“配置屬性”—“常規”—“字符集”—“使用多位元組字符集”

下面在專案標頭檔案或者要連線資料庫的檔案程式中新增標頭檔案:

#include "winsock.h"  
#include "mysql.h" 

到現在,配置已經完成了,接下來開始貼相關資料庫增刪改查的程式碼。


MYSQL m_sqlCon;

//連線資料庫
bool CServerToolDlg::ConnectSQLData()
{
	mysql_init(&m_sqlCon);
	// localhost:伺服器 root/123456為賬號密碼 student為資料庫名 3306為埠  
	if (!mysql_real_connect(&m_sqlCon, "localhost", "root", "123456", "student", 3306, NULL, 0))
	{
		AfxMessageBox(_T("訪問資料庫失敗!"));
		CString e = mysql_error(&m_sqlCon);//需要將專案屬性中字符集修改為“使用多位元組字符集”或“未設定”
		MessageBox(e);
		return false;
	}
	else
	{
		//AfxMessageBox(_T("成功!"));
		int a = mysql_query(&m_sqlCon, "SET NAMES 'GB2312'");//解決從資料庫中讀取資料後漢字亂碼顯示的問題
		return true;
	}
}

//增加資料
int CServerToolDlg::InsertSQLData(CString SQL, char* &Msg)
{
	char insert[1000];
	//sprintf_s(insert, "insert into str(idstr, name, sex) values (\'9\', \'888\', \'w\')");
	strcpy_s(insert, SQL);
	if (mysql_query(&m_sqlCon, insert) == 0)
	{
		//AfxMessageBox(_T("插入資料成功!"));
		return 0;
	}
	else
	{
		AfxMessageBox(_T("插入資料失敗!"));
		return 1;
	}
}

//修改資料
int CServerToolDlg::UpdateSQLData(CString SQL, char* &Msg)
{
	char insert[1000];
	strcpy_s(insert, SQL);
	if (mysql_query(&m_sqlCon, insert) != 0)
	{
		AfxMessageBox(_T("修改資料失敗!"));
		return 1;
	}
	//AfxMessageBox(_T("修改資料成功!"));
	return 0;
}

//刪除資料
int CServerToolDlg::DeleteSQLData(CString SQL, char* &Msg)
{
	char insert[1000];
	strcpy_s(insert, SQL);
	if (mysql_query(&m_sqlCon, insert) != 0)
	{
		AfxMessageBox(_T("刪除資料失敗!"));
		return 1;
	}
	AfxMessageBox(_T("刪除資料成功!"));
	return 0;
}

//查詢資料
CString CServerToolDlg::SelectSQLData(CString SQL, char* &Msg)
{
	int res;
	MYSQL_RES *result = NULL;
	MYSQL_FIELD *field = NULL;

	res = mysql_query(&m_sqlCon, "select * from str where (name = '555')"); //讀取資料庫student的str表中name的資料
	//判斷是否讀取成功
	if (res)
		MessageBox("error");

	//儲存結果    
	result = mysql_store_result(&m_sqlCon);
	//路徑資料的個數
	int rowcount = mysql_num_rows(result);
	CString ss;
	ss.Format("%d", rowcount);
	MessageBox("有多少行=" + ss);
	//欄位的個數
	int fieldcount = mysql_num_fields(result);
	ss.Format("%d", fieldcount);
	MessageBox("有多少列=" + ss);
	//顯示所有欄位
	for (int i = 0; i < fieldcount; i++)
	{
		field = mysql_fetch_field_direct(result, i);
		//MessageBox(field->name);
	}

	//顯示各個欄位下的所有資料
	MYSQL_ROW row = NULL;
	row = mysql_fetch_row(result);
	while (NULL != row)
	{
		for (int i = 0; i<fieldcount; i++)
		{
			MessageBox(row[i]);
		}
		row = mysql_fetch_row(result);
	}

	return ss;
}

//關閉資料庫
void CServerToolDlg::CloseSQLData()
{
	mysql_close(&m_sqlCon);//關閉Mysql連線  
}

基本上就是這樣,主要在於SQL語句的運用,下面列舉幾個常用的語句型別:

TRUNCATE TABLE excel1;       //清空資料庫的內容,並使ID為1

SET SQL_SAFE_UPDATES = 0;    //修改資料庫的安全模式,0低1高
SELECT * FROM student.str;    //列表出來
DELETE FROM str WHERE (sex = 9);    //刪除指定的內容
SELECT * FROM student.str where (name = '555');    //查詢資料
UPDATE str SET sex = 'q' WHERE (idstr = '6');    //修改資料
insert into str(idstr, name, sex) values (\'9\', \'888\', \'w\')    //插入資料
INSERT INTO TABLE(col1, col2) SELECT val11, val12 UNION ALL SELECT val21, val22 ;    //插入多條資料

最後特別注意的是分號;問題,在MFC中,SQL語句的最後不要帶號。例如我呼叫上面的一個函式

CString SQL = "insert into str(idstr, name, sex) values (\'9\', \'888\', \'w\')";	//增加指令
		SQL = "DELETE FROM str WHERE (idstr = 8)";	//刪除指令
		SQL = "UPDATE str SET sex = 'qqq' WHERE (idstr = '5')";	//插入指令

		UpdateSQLData(SQL, Msg);
		//SelectSQLData(SQL, Msg);
		//DeleteSQLData(SQL, Msg);
		//InsertSQLData(SQL, Msg);

嗯,基本上就是這樣了,記錄一下,以後用的時候方便點!

MySQL遠端訪問不行解決辦法

找到MySQL安裝的bin目錄,開啟cmd視窗,輸入下面

mysql -u root -p 123456
use mysql;
update user set host = '%' where user = 'root';
select host,use from user;
flush privileges;