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;