看过很多C或是C++操作MySQL数据库的文章,大部分太吃力了,甚至有一部分根本没有很好的组织文字,初学者比较难以接受,即使是C++或是C高手也是比较难看懂。写这篇文章的目的不是别的,就一个,告诉您用MySQL的C API直接操作MySQL数据,并做了比较高效的封装,可以帮助开发人员大幅度提高采用MySQL的C API操作MySQL数据库的效率。
MySQL数据库安装之后在/MySQL Server 5.0/lib/opt目录下有所需要的各种文件,我们需要的只是以下几个:
同时需要/MySQL Server 5.0/include目录下的几个文件:
在VC的安装目录Microsoft Visual Studio/VC98/Lib下找到:
2、 使用VC的AppWizard建立一个Win32 Console Application,其实可以是Dialog工程或是其他类型工程,比如工程取名CMySQL
3、 把刚才准备好的文件拷贝你的工程目录下,和普通的CPP文件在同一个目录即可
4、 建立之后,在VC的菜单栏点击Project(项目)->Settings(设置),弹出对话框,选择Link标签进入Link设置,在Object/library modules 的框里面加入
libmysql.lib[有个空格]WS2_32.LIB
/****************************MYSQL IN C*******************************/
/*************************2007 -03 -07 *******************************/
/*************************李克喜**************************************/
int ConnMySQL(char *host,char * port,char * Db,char * user,char* passwd,char * charset,char * Msg);
string 准备放置返回的数据,多条记录则用0x06隔开,多个栏位用0x05隔开
string SelectData(char * SQL,int Cnum ,char * Msg);
int InsertData(char * SQL,char * Msg);
int UpdateData(char * SQL,char * Msg);
int DeleteData(char * SQL,char * Msg);
第二个文件实现文件:VspdCTOMySQL.cpp /****************************MYSQL IN C*******************************/
/*************************2007 -03 -07 *******************************/
/*************************李克喜**************************************/
#include "VspdCTOMySQL.h"
VspdCToMySQL::VspdCToMySQL()
VspdCToMySQL::~VspdCToMySQL()
int VspdCToMySQL::ConnMySQL(char *host,char * port ,char * Db,char * user,char* passwd,char * charset,char * Msg)
if( mysql_init(&mysql) == NULL )
Msg = "inital mysql handle error";
if (mysql_real_connect(&mysql,host,user,passwd,Db,0,NULL,0) == NULL)
Msg = "Failed to connect to database: Error";
if(mysql_set_character_set(&mysql,"GBK") != 0)
Msg = "mysql_set_character_set Error";
string VspdCToMySQL::SelectData(char * SQL,int Cnum,char * Msg)
if(mysql_query(&mysql,sql) != 0)
Msg = "select ps_info Error";
m_res = mysql_store_result(&mysql);
Msg = "select username Error";
while(m_row = mysql_fetch_row(m_res))
for(int i = 0;i < Cnum;i++)
mysql_free_result(m_res);
int VspdCToMySQL::InsertData(char * SQL,char * Msg)
if(mysql_query(&mysql,sql) != 0)
Msg = "Insert Data Error";
int VspdCToMySQL::UpdateData(char * SQL,char * Msg)
if(mysql_query(&mysql,sql) != 0)
Msg = "Update Data Error";
int VspdCToMySQL::DeleteData(char * SQL,char * Msg)
if(mysql_query(&mysql,sql) != 0)
Msg = "Delete Data error";
void VspdCToMySQL::CloseMySQLConn()
6、 在main函数,(如果是其他工程级不是main了,可能是一个按钮里面的代码块)添加 一些代码,添加之后如下:
#include "VspdCTOMySQL.h"
int main(int argc, char* argv[])
char* charset = "GBK";//支持中文
VspdCToMySQL * vspdctomysql = new VspdCToMySQL;
if(vspdctomysql->ConnMySQL(host,port,dbname,user,passwd,charset,Msg) == 0)
char * SQL = "SELECT ids,username,passwd,address FROM vcaccesstest";
string str = vspdctomysql->SelectData(SQL,4,Msg);
SQL = "insert into vcaccesstest(ids,username,passwd,address) values(4,'我的','123210','测试地址')";
if(vspdctomysql->InsertData(SQL,Msg) == 0)
SQL = "update vcaccesstest set username = '修改了',passwd='2345' where ids = 3 ";
if(vspdctomysql->UpdateData(SQL,Msg) == 0)
SQL = "delete from vcaccesstest where ids = 3 ";
if(vspdctomysql->DeleteData(SQL,Msg) == 0)
vspdctomysql->CloseMySQLConn();
7、 数据库表确认表存在,(程序中的表和字段是我的数据库里面的内容,你要自己搞定你的SQL语句了,你可以看main函数里面的SQL变量的内容。
9、 总结,你要做的事情很少了,两个主要的文件写好了,你看例子调用即可,其他MySQL的库文件和附加文件别人也为您准备好了,移植到其他系统也是很简单的,比如移植到Linux和Unix下也是很简单的,VspdCTOMySQL.h和VspdCTOMySQL.cpp基本上是采用标准的C++编写的,在别的系统可能需要做少量修改即可。
本文转自NewPanderKing51CTO博客,原文链接:http://www.cnblogs.com/newpanderking/p/3325674.html ,如需转载请自行联系原作者