記得看過有人說,現在的軟件基本上都是連著數據庫的,如果一個軟件沒有跟數據庫相連,基本沒什麼作用。雖然這種說法略顯片面,但數據庫之於軟件的重要也是毋庸置疑的。
MFC連接數據庫應該不算是什麼新鮮的命題了,方法是有好幾種的,本人試了下,感覺利用MySQL提供的C語言API來進行操作蠻方便的,所以在此記錄下相關的操作。
要用MySQL提供的C語言API,首先要包含API的頭文件目錄,也就是在MFC工程屬性中的“包含目錄”下添加MySQL安裝目錄的“include”文件夾。因為API是以動態鏈接庫的形式打包的,所以還要在MFC工程屬性中的“庫目錄”下添加MySQL安裝目錄的“lib”文件夾,結果如下圖所示:
因為是動態鏈接庫,所以在做完上面的配置後,要將MySQL安裝目錄下的libmysql.dll文件拷貝到MFC工程目錄下,如果以後要發行的話這個也要打包進去。昨晚這一步,我們只需要在用到MySQL的頭文件中包含MySQL頭文件就可以正常使用此數據庫了。代碼如下:
#include "winsock.h"//因為數據庫是通過網絡連接的,必須包含網絡相關頭文件 #include "mysql.h"//這個沒什麼好說的,mysql頭文件自然要包含 #pragma comment(lib,"libmySQL.lib")//附加依賴項,也可以在工程屬性中設置
做完上面的配置,我們已經可以正常的使用MySQL提供的API了,下面分門別類的來講講具體的操作。
連接數據庫:
MYSQL m_sqlCon; mysql_init(&m_sqlCon);//初始化數據庫對象 if (!mysql_real_connect(&m_sqlCon, "localhost", "root", "123", "test", 3306, NULL, 0))//localhost:服務器地址,可以直接填入IP;root:賬號;123:密碼;test:數據庫名;3306:網絡端口 { AfxMessageBox(_T("數據庫連接失敗!")); return; } else//連接成功則繼續訪問數據庫,之後的相關操作代碼基本是放在這裡面的 { AfxMessageBox(_T("數據庫連接成功!")); } mysql_close(&m_sqlCon);//關閉Mysql連接
得到數據庫中表數據:
mysql_query(&m_sqlCon, "SET NAMES 'GB2312'");//設置數據庫字符格式,解決中文亂碼問題 if (mysql_real_query(&m_sqlCon, "select * from 物料屬性", (unsigned long)strlen("select * from 物料屬性")))// 查詢數據庫中的"物料屬性"表 {return;} res = mysql_store_result(&m_sqlCon);//得到存儲結果集 if (NULL == res)//如果為空則返回 { return; } int listrow = 0; while (row = mysql_fetch_row(res))//重復讀取行,把數據放入列表中,直到row為NULL { for (int rols = 0; rols < cols; rols++) { CString myreaddata(row[rols]); if (rols==0) { list->InsertItem(listrow, myreaddata);//添加第一個學生數據 } else { list->SetItemText(listrow, rols, myreaddata); } } listrow++; }清空數據表內容:
mysql_query(&m_sqlCon, "SET NAMES 'GB2312'");//設置數據庫字符格式,解決中文亂碼問題 char *mysqlstatements = "DELETE 物料屬性.*FROM 物料屬性";//sql操作語句 mysql_real_query(&m_sqlCon, mysqlstatements, (unsigned long)strlen(mysqlstatements));//清空"物料屬性"表
sprintf_s(mysqlstatements, "INSERT INTO 物料屬性(物料編號,物料名稱,所屬類別,計量單位,樣品單價,批量單價) value('%s', '%s', '%s', '%s', '%s', '%s')", mysqlinsertpoint[0], mysqlinsertpoint[1], mysqlinsertpoint[2], mysqlinsertpoint[3], mysqlinsertpoint[4], mysqlinsertpoint[5]); //sql操作語句 mysql_real_query(&m_sqlCon, mysqlstatements, (unsigned long)strlen(mysqlstatements));//插入數據到"物料屬性"表