利用mysql的C API来操作mysql数据库

        要使用mysql的C API来操作数据库,则在安装数据库的时候必须选择安装其开发组件,主要是一些头文件和库文件的安装,在编程的时候需要使用这些库。在程序开发的时候,需要包含头文件文件夹include,以及库文件夹lib/debug,在外部库依赖中填写libmysql.lib,另外,由于需要使用网络连接,还需要开启windows socket 支持。

        在我的测试程序中,我建立的表结构为:

利用mysql的C API来操作mysql数据库_第1张图片

        其中的数据有:


       测试代码(测试代码没有处理编码方面的问题,本人发现当user_name字段中存在汉字时,对话框中显示的是问号):

//测试连接mysql
void CServerDlg::OnBnClickedConnMysqlButton()
{
	// TODO: Add your control notification handler code here
	MYSQL mysql; //数据库连接句柄     
	mysql_init (&mysql);
	//建立连接
	if(!mysql_real_connect(&mysql,"127.0.0.1","root","123456","test",3306,NULL,0))
	{//mydb为你所创建的数据库,3306为端口号,可自行设定 
		AfxMessageBox(_T("数据库连接失败!")); 
	}
	else
	{
		AfxMessageBox(_T("数据库连接成功!")); 
	}
	//修改操作
	char * update_query = "update user set user_name=\'sabi-No1\' where user_id=\'2340230\'";
	int length = strlen(update_query);
	if(mysql_real_query(&mysql, update_query, length)!=0)
	{ 
		AfxMessageBox(_T("修改失败!")); 
	}
	else
	{
		AfxMessageBox(_T("修改成功!")); 
	}
	//添加操作
	char * add_query = "insert into user (user_id,pwd,user_name) values (\'8220334\',\'123456\',\'test2\')";
	length = strlen(add_query);
	if(mysql_real_query(&mysql, add_query, length)!=0)
	{ 
		AfxMessageBox(_T("添加失败!")); 
	}
	else
	{
		AfxMessageBox(_T("添加成功!")); 
	}
	//删除操作
	char * del_query = "delete from user where user_id=\'8220334\'";
	length = strlen(del_query);
	if(mysql_real_query(&mysql, del_query, length)!=0)
	{ 
		AfxMessageBox(_T("删除失败!")); 
	}
	else
	{
		AfxMessageBox(_T("删除成功!")); 
	}
	//查询操作
	char * sel_query = "select * from user";
	length = strlen(sel_query);

	MYSQL_RES * result;
	MYSQL_ROW row;
	unsigned long * collen;
	if((mysql_real_query(&mysql, sel_query, length)==0) && ((result = mysql_use_result(&mysql)) != NULL))
	{
		AfxMessageBox(_T("查询成功!")); 
		int num_col = mysql_num_fields(result);
		while (row = mysql_fetch_row(result))
		{
			AfxMessageBox(row[0]); 
			AfxMessageBox(row[1]); 
			AfxMessageBox(row[2]); 
		}

		mysql_free_result(result);
	}
	else
	{
		AfxMessageBox(_T("查询失败!")); 
	}
	//////////////////////////
	mysql_close(&mysql);
}

(20120704注:)

关于乱码的问题,今天解决了。数据库中存储数据使用的是utf8编码,这是一种三字节的编码,我的VC使用的是双字节的unicode编码。具体的处理过程是:

1、在建立连接前设置选项

mysql_options(&mysql,MYSQL_SET_CHARSET_NAME, "utf8");

2、从数据库读取数据时,获取他的字段长度

row = mysql_fetch_row(result);
unsigned long * collen = mysql_fetch_lengths(result);
3、使用MultiByteToWideChar方法将三字节数据转换为双字节数据(详见 MSDN)
WCHAR wsz[100];
MultiByteToWideChar(CP_UTF8,0,row[0],collen[0]+1,wsz,sizeof(wsz));
CString str;
str.Format(L"%s",wsz);
AfxMessageBox(str);

MultiByteToWideChar(CP_UTF8,0,row[1],collen[1]+1,wsz,sizeof(wsz));
str.Format(L"%s",wsz);
AfxMessageBox(str);

MultiByteToWideChar(CP_UTF8,0,row[2],collen[2]+1,wsz,sizeof(wsz));
str.Format(L"%s",wsz);
AfxMessageBox(str);


你可能感兴趣的:(c,数据库,mysql,api,user,query)