




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用C++操作MySQL数据库类:注释:这几个类对处理不是很大数据量的操作是很理想的,但不适宜特大型的数据的查询,因为源码中将查询到的数据直接放入了内存。/**project:*通用模块(用c++处理mysql数据库类,像ADO*description:**通过DataBase,RecordSet,Record,Field类,实现对mysql数据库的操作*包括连接、修改、添加、删除、查询等等,像ADO一样操作数据库,使*用方便**(theendofthisfilehaveonesample,*welcomtouse...)**file:zlb_mysql.h*author:@zlb*time:2005-12-12*--*/#ifndefZLB_MYSQL_H#defineZLB_MYSQL_H#include"mysql.h"#include#include#includeusingnamespacestd;namespacezlb_mysql{/**字段操作*/classField{public:/*字段名称*/vectorm_name;/*字段类型*/vectorm_type;public:Field();~Field();/*是否是数字*/boolIsNum(intnum);/*是否是数字*/boolIsNum(stringnum);/*是否是日期*/boolIsDate(intnum);/*是否是日期*/boolIsDate(stringnum);/*是否是字符*/boolIsChar(intnum);/*是否是字符*/boolIsChar(stringnum);/*是否为二进制数据*/boolIsBlob(intnum);/*是否为二进制数据*/boolIsBlob(stringnum);/*得到指定字段的序号*/intGetField_NO(stringfield_name);};/**1单条记录*2[int]操作[""]操作*/classRecord{public:/*结果集*/vectorm_rs;/*字段信息占用4字节的内存当记录数很大是回产生性能问题*/Field*m_field;public:Record(){};Record(Field*m_f);~Record();voidSetData(stringvalue);/*[""]操作*/stringoperator[](strings);stringoperator[](intnum);/*null值判断*/boolIsNull(intnum);boolIsNull(strings);/*用valuetabvalue的形式返回结果*/stringGetTabText();};/**1记录集合*2[int]操作[""]操作*3表结构操作*4数据的插入修改*/classRecordSet{private:/*记录集*/vectorm_s;/*游标位置*/unsignedlongpos;/*记录数*/intm_recordcount;/*字段数*/intm_field_num;/*字段信息*/Fieldm_field;MYSQL_RES*res;MYSQL_FIELD*fd;MYSQL_ROWrow;MYSQL*m_Data;public:RecordSet();RecordSet(MYSQL*hSQL);~RecordSet();/*处理返回多行的查询,返回影响的行数*/intExecuteSQL(constchar*SQL);/*得到记录数目*/intGetRecordCount();/*得到字段数目*/intGetFieldNum();/*向下移动游标*/longMoveNext();/*移动游标*/longMove(longlength);/*移动游标到开始位置*/boolMoveFirst();/*移动游标到结束位置*/boolMoveLast();/*获取当前游标位置*/unsignedlongGetCurrentPos()const;/*获取当前游标的对应字段数据*/boolGetCurrentFieldValue(constchar*sFieldName,char*sValue);boolGetCurrentFieldValue(constintiFieldNum,char*sValue);/*获取游标的对应字段数据*/boolGetFieldValue(longindex,constchar*sFieldName,char*sValue);boolGetFieldValue(longindex,intiFieldNum,char*sValue);/*是否到达游标尾部*/boolIsEof();/*返回字段*/Field*GetField();/*返回字段名*/constchar*GetFieldName(intiNum);/*返回字段类型*/constintGetFieldType(char*sName);constintGetFieldType(intiNum);/*返回指定序号的记录*/Recordoperator[](intnum);};/**1负责数据库的连接关闭*2执行sql语句(不返回结果)*3处理事务*/classDataBase{public:DataBase();~DataBase();private:/*msyql连接句柄*/MYSQL*m_Data;public:/*返回句柄*/MYSQL*GetMysql();/*连接数据库*/intConnect(stringhost,stringuser,stringpasswd,stringdb,unsignedintport,unsignedlongclient_flag);/*关闭数据库连接*/voidDisConnect();/*执行非返回结果查询*/intExecQuery(stringsql);/*测试mysql效劳器是否存活*/intPing();/*关闭mysql效劳器*/intShutDown();/*主要功能:重新启动mysql效劳器*/intReBoot();/**说明:事务支持InnoDBorBDB表类型*//*主要功能:开始事务*/intStart_Transaction();/*主要功能:提交事务*/intCommit();/*主要功能:回滚事务*/intRollback();/*得到客户信息*/constchar*Get_client_info();/*主要功能:得到客户版本信息*/constunsignedlongGet_client_version();/*主要功能:得到主机信息*/constchar*Get_host_info();/*主要功能:得到效劳器信息*/constchar*Get_server_info();/*主要功能:得到效劳器版本信息*/constunsignedlongGet_server_version();/*主要功能:得到当前连接的默认字符集*/constchar*Get_character_set_name();/*主要功能返回单值查询*/char*ExecQueryGetSingValue(stringsql);/*得到系统时间*/constchar*GetSysTime();/*建立新数据库*/intCreate_db(stringname);/*删除制定的数据库*/intDrop_db(stringname);};};#endif//ZLB_MYSQL_H/**project:*通用模块(用c++处理mysql数据库类,像ADO)**description:**通过DataBase,RecordSet,Record,Field类,实现对mysql数据库的操作*包括连接、修改、添加、删除、查询等等,像ADO一样操作数据库#include"stdafx.h"#include"zlb_mysql.h"namespacezlb_mysql{/*+++++++++++++++++++++++++++++++++++++++++++++++++++*//**字段操作*/Field::Field(){}Field::~Field(){}/**是否是数字*/boolField::IsNum(intnum){if(IS_NUM(m_type[num]))returntrue;elsereturnfalse;}/**是否是数字*/boolField::IsNum(stringnum){if(IS_NUM(m_type[GetField_NO(num)]))returntrue;elsereturnfalse;}/**是否是日期*/boolField::IsDate(intnum){if(FIELD_TYPE_DATE==m_type[num]||FIELD_TYPE_DATETIME==m_type[num])returntrue;elsereturnfalse;}/*是否是日期*/boolField::IsDate(stringnum){inttemp;temp=GetField_NO(num);if(FIELD_TYPE_DATE==m_type[temp]||FIELD_TYPE_DATETIME==m_type[temp])returntrue;elsereturnfalse;}/**是否是字符*/boolField::IsChar(intnum){if(m_type[num]==FIELD_TYPE_STRING||m_type[num]==FIELD_TYPE_VAR_STRING||m_type[num]==FIELD_TYPE_CHAR)returntrue;elsereturnfalse;}/**是否是字符*/boolField::IsChar(stringnum){inttemp;temp=this->GetField_NO(num);if(m_type[temp]==FIELD_TYPE_STRING||m_type[temp]==FIELD_TYPE_VAR_STRING||m_type[temp]==FIELD_TYPE_CHAR)returntrue;elsereturnfalse;}/**是否为二进制数据*/boolField::IsBlob(intnum){if(IS_BLOB(m_type[num]))returntrue;elsereturnfalse;}/**是否为二进制数据*/boolField::IsBlob(stringnum){if(IS_BLOB(m_type[GetField_NO(num)]))returntrue;elsereturnfalse;}/**得到指定字段的序号*/intField::GetField_NO(stringfield_name){for(unsignedinti=0;i<p>{if(!m_name[i]pare(field_name))returni;}return-1;}/*-----------------------------------------------------*//*+++++++++++++++++++++++++++++++++++++++++++++++++++*//**1单条记录*2[int]操作[""]操作*/Record::Record(Field*m_f){m_field=m_f;}Record::~Record(){};voidRecord::SetData(stringvalue){m_rs.push_back(value);}/*[""]操作*/stringRecord::operator[](strings){returnm_rs[m_field->GetField_NO(s)];}stringRecord::operator[](intnum){returnm_rs[num];}/*null值判断*/boolRecord::IsNull(intnum){if(""==m_rs[num].c_str())returntrue;elsereturnfalse;}boolRecord::IsNull(strings){if(""==m_rs[m_field->GetField_NO(s)].c_str())returntrue;elsereturnfalse;}/*主要-功能:用valuetabvalue的形式返回结果*/stringRecord::GetTabText(){stringtemp;for(unsignedinti=0;i<M_RS.SIZE();I++)<p>{temp+=m_rs[i];if(i<>temp+="\t";}returntemp;}/*-----------------------------------------------------*//*+++++++++++++++++++++++++++++++++++++++++++++++++++*//**1记录集合*2[int]操作[""]操作*3表结构操作*4数据的插入修改*/RecordSet::RecordSet(){res=NULL;row=NULL;pos=0;}RecordSet::RecordSet(MYSQL*hSQL){res=NULL;row=NULL;m_Data=hSQL;pos=0;}RecordSet::~RecordSet(){}/**处理返回多行的查询,返回影响的行数*成功返回行数,失败返回-1*/intRecordSet::ExecuteSQL(constchar*SQL){if(!mysql_real_query(m_Data,SQL,strlen(SQL))){//保存查询结果res=mysql_store_result(m_Data);//得到记录数量m_recordcount=(int)mysql_num_rows(res);//得到字段数量m_field_num=mysql_num_fields(res);for(intx=0;fd=mysql_fetch_field(res);x++){m_field.m_name.push_back(fd->name);m_field.m_type.push_back(fd->type);}//保存所有数据while(row=mysql_fetch_row(res)){Recordtemp(&m_field);for(intk=0;k<m_field_num;k++){if(row[k]==NULL||(!strlen(row[k]))){temp.SetData("");}else{temp.SetData(row[k]);}}//添加新记录m_s.push_back(temp);}mysql_free_result(res);returnm_s.size();}return-1;}/**向下移动游标*返回移动后的游标位置*/longRecordSet::MoveNext(){return(++pos);}/*移动游标*/longRecordSet::Move(longlength){intl=pos+length;if(l<0){pos=0;return0;}else{if(l>=m_s.size()){pos=m_s.size()-1;returnpos;}else{pos=l;returnpos;}}}/*移动游标到开始位置*/boolRecordSet::MoveFirst(){pos=0;returntrue;}/*移动游标到结束位置*/boolRecordSet::MoveLast(){pos=m_s.size()-1;returntrue;}/*获取当前游标位置*/unsignedlongRecordSet::GetCurrentPos()const{returnpos;}/*获取当前游标的对应字段数据*/boolRecordSet::GetCurrentFieldValue(constchar*sFieldName,char*sValue){strcpy(sValue,m_s[pos][sFieldName].c_str());returntrue;}boolRecordSet::GetCurrentFieldValue(constintiFieldNum,char*sValue){strcpy(sValue,m_s[pos][iFieldNum].c_str());returntrue;}/*获取游标的对应字段数据*/boolRecordSet::GetFieldValue(longindex,constchar*sFieldName,char*sValue){strcpy(sValue,m_s[index][sFieldName].c_str());returntrue;}boolRecordSet::GetFieldValue(longindex,intiFieldNum,char*sValue){strcpy(sValue,m_s[index][iFieldNum].c_str());returntrue;}/*是否到达游标尾部*/boolRecordSet::IsEof(){return(pos==m_s.size())?true:false;}/**得到记录数目*/intRecordSet::GetRecordCount(){returnm_recordcount;}/**得到字段数目*/intRecordSet::GetFieldNum(){returnm_field_num;}/**返回字段*/Field*RecordSet::GetField(){return&m_field;}/*返回字段名*/constchar*RecordSet::GetFieldName(intiNum){returnm_field.m_name.at(iNum).c_str();}/*返回字段类型*/constintRecordSet::GetFieldType(char*sName){inti=m_field.GetField_NO(sName);returnm_field.m_type.at(i);}constintRecordSet::GetFieldType(intiNum){returnm_field.m_type.at(iNum);}/**返回指定序号的记录*/RecordRecordSet::operator[](intnum){returnm_s[num];}/*--------------------------------------------------*//*+++++++++++++++++++++++++++++++++++++++++++++++++++*//**1负责数据库的连接关闭*2执行sql语句(不返回结果)*3处理事务*/DataBase::DataBase(){m_Data=NULL;}DataBase::~DataBase(){if(NULL!=m_Data){DisConnect();}}/*返回句柄*/MYSQL*DataBase::GetMysql(){returnm_Data;}/**主要功能:连接数据库*参数说明:*1host主机ip地址或者时主机名称*2user用户名*3passwd密码*4db欲连接的数据库名称*5port端口号*6uinx嵌套字*7client_flag客户连接参数*返回值:0成功-1失败*/intDataBase::Connect(stringhost,stringuser,stringpasswd,stringdb,unsignedintport,unsignedlongclient_flag){if((m_Data=mysql_init(NULL))&&mysql_real_connect(m_Data,host.c_str(),user.c_str(),passwd.c_str(),db.c_str(),port,NULL,client_flag)){//选择制定的数据库失败if(mysql_select_db(m_Data,db.c_str())<0){mysql_close(m_Data);return-1;}}else{//初始化mysql结构失败mysql_close(m_Data);return-1;}//成功return0;}/**关闭数据库连接*/voidDataBase::DisConnect(){mysql_close(m_Data);}/**主要功能:执行非返回结果查询*参数:sql待执行的查询语句*返回值;n为成功表示受到影响的行数-1为执行失败*/intDataBase::ExecQuery(stringsql){if(!mysql_real_query(m_Data,sql.c_str(),(unsignedlong)sql.length())){//得到受影响的行数return(int)mysql_affected_rows(m_Data);}else{//执行查询失败return-1;}}/**主要功能:测试mysql效劳器是否存活*返回值:0表示成功-1失败*/intDataBase::Ping(){if(!mysql_ping(m_Data))return0;elsereturn-1;}/**主要功能:关闭mysql效劳器*返回值;0成功-1失败*/intDataBase::ShutDown(){if(!mysql_shutdown(m_Data,SHUTDOWN_DEFAULT))return0;elsereturn-1;}/**主要功能:重新启动mysql效劳器*返回值;0表示成功-1表示失败*/intDataBase::ReBoot(){if(!mysql_reload(m_Data))return0;elsereturn-1;}/**说明:事务支持InnoDBorBDB表类型*//**主要功能:开始事务*/intDataBase::Start_Transaction(){if(!mysql_real_query(m_Data,"STARTTRANSACTION",(unsignedlong)strlen("STARTTRANSACTION"))){return0;}else//执行查询失败return-1;}/**主要功能:提交事务*返回值:0表示成功-1表示失败*/intDataBase::Commit(){if(!mysql_real_query(m_Data,"COMMIT",(unsignedlong)strlen("COMMIT"))){return0;}else//执行查询失败return-1;}/**主要功能:回滚事务*返回值:0表示成功-1表示失败*/intDataBase::Rollback(){if(!mysql_real_query(m_Data,"ROLLBACK",(unsignedlong)strlen("ROLLBACK")))return0;else//执行查询失败return-1;}/*得到客户信息*/constchar*DataBase::Get_client_info(){returnmysql_get_client_info();}/*主要功能:得到客户版本信息*/constunsignedlongDataBase::Get_client_version(){returnmysql_get_client_version();}/*主要功能:得到主机信息*/constchar*DataBase::Get_host_info(){returnmysql_get_host_info(m_Data);}/*主要功能:得到效劳器信息*/constchar*DataBase::Get_server_info(){returnmysql_get_server_info(m_Data);}/*主要功能:得到效劳器版本信息*/constunsignedlongDataBase::Get_server_version(){returnmysql_get_server_version(m_Data);}/*主要功能:得到当前连接的默认字符集*/constchar*DataBase::Get_character_set_name(){returnmysql_character_set_name(m_Data);}/**主要功能返回单值查询*/char*DataBase::ExecQueryGetSingValue(stringsql){MYSQL_RES*res;MYSQL_ROWrow;char*p=NULL;if(!mysql_real_query(m_Data,sql.c_str(),(unsignedlong)sql.length())){//保存查询结果res=mysql_store_result(m_Data);row=mysql_fetch_row(res);p=((row[0]==NULL)||(!strlen(row[0])))?"-1":row[0];mysql_free_result(res);}else//执行查询失败p="-1";returnp;}/**得到系统时间*/constchar*DataBase::GetSysTime(){returnExecQueryGetSingValue("selectnow()");}/**主要功能:建立新数据库*参数:name为新数据库的名称*返回:0成功-1失败*/intDataBase::Create_db(stringname){stringtemp;temp="CREATEDATABASE";temp+=name;if(!mysql_real_query(m_Data,temp.c_str(),(unsignedlong)temp.length()))return0;else//执行查询失败return-1;}/**主要功能:删除制定的数据库*参数:name为欲删除数据库的名称*返回:0成功-1失败*/intDataBase::Drop_db(stringname){stringtemp;temp="DROPDATABASE";temp+=name;if(!mysql_real_query(m_Data,temp.c_str(),(unsignedlong)temp.length()))return0;else//执行查询失败return-1;}/*-----------------------------------------------------*/};/**使用例子*/#include"zlb_mysql.h"usingnamespacestd;voidmain(){zlb_mysql::DataBasezlb;//连接数据库
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某年度党政教育服务竞争策略分析报告
- 某年度工业涂料水性色浆战略市场规划报告
- 汉语“掉落”义词的历时演变与共时分布研究
- 帕宁Ⅰ号方对帕金森病模型小鼠线粒体生物发生的影响及机制研究
- 湿地恢复项目中苗木成活率的保障措施
- 2025-2030中国折叠手杖行业市场现状供需分析及投资评估规划分析研究报告
- 商业地产项目经理的总结与招商计划
- 能源与动力工程专业实习报告范文
- 2025-2030中国强力霉素注射液行业市场现状供需分析及投资评估规划分析研究报告
- 物理实验操作与数据分析:高中物理实验课教案
- 2025年六一儿童节校长致辞:每个孩子都是一朵会发光的花
- 公司应急演练方案
- 2025保密法宣传专题培训课件
- 班组安全教育试题及答案
- 虎符铜砭刮痧课件
- 《医疗机构工作人员廉洁从业九项准则》解读
- 水产养殖网箱租赁与饲料供应合作协议
- 2025年全国保密教育线上培训考试试题库含答案(新)附答案详解
- 《神经网络模型》课件
- (四调)武汉市2025届高中毕业生四月调研考试 英语试卷(含答案)
- QCT1169-2022汽车用液晶仪表
评论
0/150
提交评论