C语言MYSQL数据库开发入门

本文分享了作者自学C语言MYSQL数据库开发的经历,包括安装配置、VS2010连接数据库的方法,以及简单的插入和查询操作示例。


   有好久不写博客记录自己的学习历程了,由于以前只用过JAVA和安卓开发数据库,今天闲来无聊根据网上的一系列相关的教程自学了下C语言MYSQL数据库开发。写篇博客记录下今天学习的收获和感悟,其中包括从MYSQL的安装,环境配置,VS2010连接数据库以及在编程时遇到的一系列问题及我的解决措施。

  首先是安装MYSQL,我安装的是MYSQL5.0  下面是下载链接:

thunder://QUFmdHA6Ly9qYjUxdXNlcjp3d3cuamI1MS5uZXRAeGwuamI1MS5uZXQ6ODAyMS9zZXJ2ZXIvbXlzcWwtNS4wLnppcFpa

  我还下载了个SQLYOG用于管理数据库,由于是图形化界面,所以平时管理数据库时候更加方便直观,激活码网上可以百度到。 下面附上下载链接:

http://dx.pc6.com/soft11/pc6-mysql-SQLyog.Ultimatev9.2.0.2.zip


安装MYSQL前面一直很顺利,就是到了配置时候出现无限未响应状态。具体解决措施就是:

1.把MYSQL彻底卸载掉,把C盘和注册表中关于MYSQL的东西都删除掉。

2.打开安装好的MYSQL目录,在BIN文件夹中找到 MySQLInstanceConfig.exe ,右键点开属性,在兼容性中把兼容模式运行和管理员模式运行都选中,然后再点开MySQLInstanceConfig.exe开始安装,应该就没什么问题了。


下一步就是打开VS2010,连接MYSQL数据库了,具体步骤:

1.新建一个WIN32项目。

2。点开项目属性,在VC++目录中、把MYSQL5.0/INCLUDE添加到包含目录,把MYSQL/LIB/DEBUG添加到库目录。


3.在打开链接器 -》输入 的附加依赖项中添加 libmysql.lib.

然后就可以写程序实现对MYSQL数据库的链接了。

下面简单说下MYSQL C API编程,由于我下午才开始学习,理解也不是特别深刻,下面附些我写的代码:


首先说下头文件必须要有

#include <WinSock2.h>   
#include <mysql.h>   

然后就可以写程序正文了,首先要初始化MYSQL,并且与MYSQL数据库建立连接

	MYSQL mydata;
        mysql_library_init(0,NULL,NULL);
	mysql_init(&mydata);
	mysql_options(&mydata,MYSQL_SET_CHARSET_NAME,"gbk");

	if(mysql_real_connect(&mydata,"localhost","root","root","test",3306,0,0) != NULL) 
	{
		MessageBox(NULL,TEXT("连接成功!"),TEXT(""),MB_OK);
	}
	else{
		MessageBox(NULL,TEXT("error"),TEXT(""),MB_OK);}

mysql_init()用来初始化MYSQL,如果mysql_real_connect()执行成功了,说明就成功连接到了数据库。

下面简单贴个实现插入和查找功能的代码:

void DBT_INSERT(TCHAR* str,int i,TCHAR *str2)
{
	
	//INSERT语句
	TCHAR sql[256];
	ZeroMemory(sql,sizeof(sql)/sizeof(TCHAR));
	wsprintf(sql,TEXT(" INSERT INTO writers VALUES('%s',%i,'%s')"),str,i,str2);
	char sqlch[256];
	ZeroMemory(sqlch,sizeof(sqlch)/sizeof(char));
	wcstombs(sqlch,sql,sizeof(sql));
    WideCharToMultiByte(CP_OEMCP,NULL,sql,-1,sqlch,100,NULL,FALSE);
	if(mysql_query(&mydata,sqlch)==NULL)
	{
		MessageBox(NULL,TEXT("INSERTION SUCCEED!"),TEXT(""),MB_OK);
	}
	else
	{
		MessageBox(NULL,TEXT("INSERTION FAILED!"),TEXT(""),MB_OK);
	}
}


void DBT_SELECT(HWND hwnd)
{
	HWND listbox = GetDlgItem(hwnd,IDC_LIST1);
	ListBox_ResetContent(listbox);
	char *sql = new char[256];
	sql = "SELECT * FROM writers";
	mysql_query(&mydata,sql);
	MYSQL_RES *result = mysql_store_result(&mydata);

	int num_row = mysql_num_rows(result);
	int num_field = mysql_num_fields(result);

	MYSQL_ROW row;
	MYSQL_FIELD *field;
	field = mysql_fetch_field(result);
	row = mysql_fetch_row(result);
	char *a = new char[256];
	ZeroMemory(a,sizeof(a)/sizeof(char));
	char *b;
	TCHAR c[256];
	bool isfirst = true;
	while(field)
	{
		b = (char *)field->name;
		if(isfirst == true)
		{
			sprintf(a,"%s%s",a,b);
			isfirst = false;
		}
		else
		{
			sprintf(a,"%s\t%s",a,b);
		}
		field = mysql_fetch_field(result);
	}
	MultiByteToWideChar(CP_ACP,NULL,a,-1,c,256);
	ListBox_InsertString(listbox,-1,c);

	while(row)
	{
		isfirst = true;
		ZeroMemory(a,sizeof(a)/sizeof(char));
		for(int i=0 ; i<num_field ; i++)
		{
			b = (char*) row[i];
			if(isfirst == true)
			{
				sprintf(a,"%s%s",a,b);
				isfirst = false;
			}
			else 
			{
				sprintf(a,"%s\t%s",a,b);
			}

		}
		MultiByteToWideChar(CP_ACP,0,a,-1,c,256);
		ListBox_InsertString(listbox,-1,c);

		row = mysql_fetch_row(result);
	}
	 mysql_free_result(result);  
}


插入功能没什么好讲究的,主要说下SELECT语句,执行SELECT语句后,结果被保存在了MYSQL_RES 中,要用 row = mysql_fetch_row(result); 将记录一行一行读出来, row = mysql_fetch_row(result);语句执行一遍,row所指向的内容就自动跳到了下一跳记录。MYSQL API C编程的实例网上有许多,我就不再赘述了。以后随着学习深入再慢慢改正补充吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值