本篇文章给大家分享的是有关c++中怎么实现一个mysql通用类,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

常用的函数

初始化API库:mysql_library_init()

初始化数据结构:mysql_init()

连接数据库前的选项:mysql_options()

错误信息:mysql_error()

连接函数:mysql_real_connect()

执行SQL语句:mysql_query()

转存查询结果:mysql_store_result()

关闭连接:mysql_close()

dbctrl.h

#ifndef__DBCTRL_H__#define__DBCTRL_H__#include"winsock.h"#include"iostream.h"#include<string>#include"mysql.h"#pragmacomment(lib,"ws2_32.lib")#pragmacomment(lib,"libmysql.lib")usingnamespacestd;classDBctrl{private:MYSQLmydata;//MySQL对象,必备的一个数据结构MYSQL_RES*result;//用于存放结果建议用char*数组将此结果转存public:introw;//查询结果的行数intfield;//查询结果的列数intautoNum;//上一次auto_increment的值interrorNum;//错误代号constchar*errorInfo;//错误提示intaffectedRow;//上一次查询影响的行数DBctrl();//构造函数voidDBtest(intflag);voidDBerror();voidDBconn(char*server,char*username,char*password,char*database,intport);voidDBquery(stringqueryStr);voidDBquery(stringqueryStr,char*data[100][100]);voidDBclose();};#endif

dbctrl.cpp

#include"dbctrl.h"//构造函数初始化各个变量和数据DBctrl::DBctrl(){mysql_library_init(0,NULL,NULL);mysql_init(&mydata);mysql_options(&mydata,MYSQL_SET_CHARSET_NAME,"gbk");row=0;field=0;autoNum=0;errorNum=0;errorInfo="ok";affectedRow=0;}//编译时显示测试信息,正式使用时把此函数主题注释掉即可voidDBctrl::DBtest(intflag){char*message;switch(flag){case1:message="DatabaseOK!";break;case2:message="Databaseerror!";break;case3:message="QueryOK!";break;case4:message="Queryerror!";break;case5:message="dataoverflew!";break;default:message=NULL;break;}if(message!=NULL)cout<<message<<endl;}//收集错误信息voidDBctrl::DBerror(){errorNum=mysql_errno(&mydata);errorInfo=mysql_error(&mydata);}//连接数据库voidDBctrl::DBconn(char*server,char*username,char*password,char*database,intport){char*svr=server;//server:服务器域名或IPchar*usr=username;//username:数据库用户名char*pwd=password;//password:数据库密码char*dbn=database;//database:数据库名intprt=port;//port:端口号//这里新建变量并再赋一次值是为了调试的时候显示连接参数,其实可以不这么做if(mysql_real_connect(&mydata,svr,usr,pwd,dbn,prt,0,0)!=NULL)DBtest(1);elseDBtest(2);}//执行查询语句voidDBctrl::DBquery(stringqueryStr){if(0==mysql_query(&mydata,queryStr.c_str()))DBtest(3);elseDBtest(4);DBerror();}//执行查询语句(重载,有返回结果的)voidDBctrl::DBquery(stringqueryStr,char*data[100][100]){if(0==mysql_query(&mydata,queryStr.c_str()))DBtest(3);elseDBtest(4);affectedRow=mysql_affected_rows(&mydata);autoNum=mysql_insert_id(&mydata);result=mysql_store_result(&mydata);row=mysql_num_rows(result);//计算行数field=mysql_num_fields(result);//计算列数//转出数据if(row>100||field>100)DBtest(5);else{MYSQL_ROWline=NULL;line=mysql_fetch_row(result);//取第一行结果intj=0;while(NULL!=line)//查看是否为空行,是则结束,否则将这一行的数据转存到data的一行中并取下一行{for(inti=0;i<field;i++){data[j][i]=line[i];}j++;line=mysql_fetch_row(result);}}DBerror();}//断开连接voidDBctrl::DBclose(){mysql_close(&mydata);}

主体

#include"dbctrl.h"voidmain(){DBctrlmy;//刚才建的通用类stringquery;//存放查询语句char*data[100][100];//存放查询结果query="Select*fromtable1";my.DBconn("localhost","root","123456","test",3306);my.DBquery(query,data);//执行query中的语句,并将结果回送给datamy.DBclose();//关闭连接/*此处用for循环显示data数组的内容...*/}

以上就是c++中怎么实现一个mysql通用类,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。