VC++通過API串連MySQL,vcapi串連mysql
1、 首先安裝MySQL資料庫伺服器,本文安裝的是mysql-installer-community-5.6.10.1.msi這個版本,至於各個版本有什麼不同,不在這裡說明。
如下的預設安裝的安裝目錄結構:
2、 接著配置環境變數,這個純粹是要為了在命令列下使用mysql的相關命令更加方便。如
如下設定即可,有些安裝包已經自動給添加上了這個路徑,只需要檢查一下即可。
3、 先在命令列下建立一個資料samp_db,並在建立表students。建庫和建表都相對簡單,如下是已經建好的。
建立資料庫命令如下:
>createdatabase samp_db character set gbk;
使用資料庫samp_db
>usesamp_db;
建立資料表
>createtable students
(
id int unsigned not null auto_increment primary key,
name char(8) not null,
sex char(4) not null,
age tinyint unsigned not null,
tel char(13) null default "-",
address char(60),
modifyDateTime char(30)
);
4、 設定伺服器允許網路訪問,即將一個host設定為萬用字元%,即可允許網路上的主機訪問這個伺服器。
>use mysql;
>select 'host' from user whereuser='root';
>update user set host = '%' where user ='root';
>flush privileges;
5、 使用MySQL API訪問資料庫,即分為初始化,串連,設定,操作。
添加標頭檔
#include "mysql.h"
在程式依賴附加項中添加庫。
libmysql.lib
具體實現代碼如下:
void CTestMysqlUseAPIDlg::OnBnClickedOk(){ //TODO: 在此添加控制項通知處理常式代碼 MYSQL*con; MYSQL_RES*res; MYSQL_ROWrow; //資料庫配置 chartmp[400]; chardbuser[30] = "root"; //資料庫使用者名稱 chardbpasswd[30] = ""; //密碼 chardbip[30] = "192.168.1.101"; //資料庫伺服器IP地址 intnport = 3306; //資料庫伺服器連接埠號碼 chardbname[30] = "samp_db"; //資料庫名 chartablename[30] = "students"; //表名 char*query = NULL; unsignedint t; intcount = 0; intrt;//return value //1、將初始化MYSQL對象 con= mysql_init((MYSQL*)0); //2、串連資料庫 相當在在window命令列下執行 mysql -h 192.168.1.101 -u root if(con != NULL&& mysql_real_connect(con,dbip,dbuser,dbpasswd,dbname,nport,NULL,0)) { //3、選擇資料庫相當於執行mysql>use samp_db if(!mysql_select_db(con,dbname)) { con->reconnect = 1; //3、用於設定字元集的,主要針對儲存到資料庫中的中文 query= "set names \'GBK\'"; rt=mysql_real_query(con,query,strlen(query)); if(rt) { printf("Error making query: %s!!!\n",mysql_error(con)); } //4、設定返回字元集,這是必須要設定的,不然返回的是其它的字元集,顯示時全是亂碼。 query= "SET CHARACTER_SET_RESULTS=\'UTF8\'"; rt=mysql_real_query(con,query,strlen(query)); if(rt) { printf("Error making query: %s!!!\n",mysql_error(con)); } } } else { MessageBoxA(NULL,"串連資料庫失敗,請檢查配置!","",NULL); return; } //insert操作 chartimeBuff[32] = {0}; charbuff[256] = {0}; SYSTEMTIMEst; GetLocalTime(&st); sprintf(timeBuff,"%04d-%02d-%02d%02d:%02d:%02d",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond); sprintf(buff,"insert intostudentsvalues(NULL,\"%s\",\"%s\",%d,\"%s\",\"%s\",\"%s\");","牛小北","女",28,"135321432","長沙市",timeBuff); rt= mysql_real_query(con,buff,strlen(buff)); if(rt) { CStringsError; sError.Format(L"%s",mysql_error(con)); charbuff[128] = {0}; WideCharToMultiByte(CP_ACP,0,sError,-1,buff,127,NULL,FALSE); MessageBox(L"inserterror.!" + sError,L"",NULL); return; } //select操作 sprintf(tmp,"select *from %s where id>260;",tablename); rt= mysql_real_query(con,tmp,strlen(tmp)); if(rt) { MessageBoxA(NULL,"selecterror.!","",NULL); return; } //對結果集做處理 res= mysql_store_result(con); CStringstr; while(row = mysql_fetch_row(res)) { for(t = 0;t< mysql_num_fields(res); t++) { wchar_tTmpBuf[128] = {0}; MultiByteToWideChar(CP_UTF8,0,row[t],-1,TmpBuf,127); charbuff[127]; WideCharToMultiByte(CP_ACP,0,TmpBuf,-1,buff,127,NULL,FALSE); str+= L""+CString(buff); } str+= L"\r\n"; } //將結果集寫到EDIT中 GetDlgItem(IDC_EDIT1)->SetWindowText(str); //釋放結果集 mysql_free_result(res); //關閉串連 mysql_close(con); return;}
這是一個簡單的結果介面。
MySQL API比較多,還需要學習更多。
這個文檔的連結如下:
http://download.csdn.net/detail/cabmail/8852297
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。