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

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

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

        其中的数据有:


       测试代码(测试代码没有处理编码方面的问题,本人发现当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);


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值