版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
用C++操作MySQL數(shù)據(jù)庫(kù)類:注釋:這幾個(gè)類對(duì)處理不是很大數(shù)據(jù)量的操作是很理想的,但不適宜特大型的數(shù)據(jù)的查詢,因?yàn)樵创a中將查詢到的數(shù)據(jù)直接放入了內(nèi)存。/**project:*通用模塊(用c++處理mysql數(shù)據(jù)庫(kù)類,像ADO*description:**通過(guò)DataBase,RecordSet,Record,Field類,實(shí)現(xiàn)對(duì)mysql數(shù)據(jù)庫(kù)的操作*包括連接、修改、添加、刪除、查詢等等,像ADO一樣操作數(shù)據(jù)庫(kù),使*用方便**(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();/*是否是數(shù)字*/boolIsNum(intnum);/*是否是數(shù)字*/boolIsNum(stringnum);/*是否是日期*/boolIsDate(intnum);/*是否是日期*/boolIsDate(stringnum);/*是否是字符*/boolIsChar(intnum);/*是否是字符*/boolIsChar(stringnum);/*是否為二進(jìn)制數(shù)據(jù)*/boolIsBlob(intnum);/*是否為二進(jìn)制數(shù)據(jù)*/boolIsBlob(stringnum);/*得到指定字段的序號(hào)*/intGetField_NO(stringfield_name);};/**1單條記錄*2[int]操作[""]操作*/classRecord{public:/*結(jié)果集*/vectorm_rs;/*字段信息占用4字節(jié)的內(nèi)存當(dāng)記錄數(shù)很大是回產(chǎn)生性能問(wèn)題*/Field*m_field;public:Record(){};Record(Field*m_f);~Record();voidSetData(stringvalue);/*[""]操作*/stringoperator[](strings);stringoperator[](intnum);/*null值判斷*/boolIsNull(intnum);boolIsNull(strings);/*用valuetabvalue的形式返回結(jié)果*/stringGetTabText();};/**1記錄集合*2[int]操作[""]操作*3表結(jié)構(gòu)操作*4數(shù)據(jù)的插入修改*/classRecordSet{private:/*記錄集*/vectorm_s;/*游標(biāo)位置*/unsignedlongpos;/*記錄數(shù)*/intm_recordcount;/*字段數(shù)*/intm_field_num;/*字段信息*/Fieldm_field;MYSQL_RES*res;MYSQL_FIELD*fd;MYSQL_ROWrow;MYSQL*m_Data;public:RecordSet();RecordSet(MYSQL*hSQL);~RecordSet();/*處理返回多行的查詢,返回影響的行數(shù)*/intExecuteSQL(constchar*SQL);/*得到記錄數(shù)目*/intGetRecordCount();/*得到字段數(shù)目*/intGetFieldNum();/*向下移動(dòng)游標(biāo)*/longMoveNext();/*移動(dòng)游標(biāo)*/longMove(longlength);/*移動(dòng)游標(biāo)到開(kāi)始位置*/boolMoveFirst();/*移動(dòng)游標(biāo)到結(jié)束位置*/boolMoveLast();/*獲取當(dāng)前游標(biāo)位置*/unsignedlongGetCurrentPos()const;/*獲取當(dāng)前游標(biāo)的對(duì)應(yīng)字段數(shù)據(jù)*/boolGetCurrentFieldValue(constchar*sFieldName,char*sValue);boolGetCurrentFieldValue(constintiFieldNum,char*sValue);/*獲取游標(biāo)的對(duì)應(yīng)字段數(shù)據(jù)*/boolGetFieldValue(longindex,constchar*sFieldName,char*sValue);boolGetFieldValue(longindex,intiFieldNum,char*sValue);/*是否到達(dá)游標(biāo)尾部*/boolIsEof();/*返回字段*/Field*GetField();/*返回字段名*/constchar*GetFieldName(intiNum);/*返回字段類型*/constintGetFieldType(char*sName);constintGetFieldType(intiNum);/*返回指定序號(hào)的記錄*/Recordoperator[](intnum);};/**1負(fù)責(zé)數(shù)據(jù)庫(kù)的連接關(guān)閉*2執(zhí)行sql語(yǔ)句(不返回結(jié)果)*3處理事務(wù)*/classDataBase{public:DataBase();~DataBase();private:/*msyql連接句柄*/MYSQL*m_Data;public:/*返回句柄*/MYSQL*GetMysql();/*連接數(shù)據(jù)庫(kù)*/intConnect(stringhost,stringuser,stringpasswd,stringdb,unsignedintport,unsignedlongclient_flag);/*關(guān)閉數(shù)據(jù)庫(kù)連接*/voidDisConnect();/*執(zhí)行非返回結(jié)果查詢*/intExecQuery(stringsql);/*測(cè)試mysql效勞器是否存活*/intPing();/*關(guān)閉mysql效勞器*/intShutDown();/*主要功能:重新啟動(dòng)mysql效勞器*/intReBoot();/**說(shuō)明:事務(wù)支持InnoDBorBDB表類型*//*主要功能:開(kāi)始事務(wù)*/intStart_Transaction();/*主要功能:提交事務(wù)*/intCommit();/*主要功能:回滾事務(wù)*/intRollback();/*得到客戶信息*/constchar*Get_client_info();/*主要功能:得到客戶版本信息*/constunsignedlongGet_client_version();/*主要功能:得到主機(jī)信息*/constchar*Get_host_info();/*主要功能:得到效勞器信息*/constchar*Get_server_info();/*主要功能:得到效勞器版本信息*/constunsignedlongGet_server_version();/*主要功能:得到當(dāng)前連接的默認(rèn)字符集*/constchar*Get_character_set_name();/*主要功能返回單值查詢*/char*ExecQueryGetSingValue(stringsql);/*得到系統(tǒng)時(shí)間*/constchar*GetSysTime();/*建立新數(shù)據(jù)庫(kù)*/intCreate_db(stringname);/*刪除制定的數(shù)據(jù)庫(kù)*/intDrop_db(stringname);};};#endif//ZLB_MYSQL_H/**project:*通用模塊(用c++處理mysql數(shù)據(jù)庫(kù)類,像ADO)**description:**通過(guò)DataBase,RecordSet,Record,Field類,實(shí)現(xiàn)對(duì)mysql數(shù)據(jù)庫(kù)的操作*包括連接、修改、添加、刪除、查詢等等,像ADO一樣操作數(shù)據(jù)庫(kù)#include"stdafx.h"#include"zlb_mysql.h"namespacezlb_mysql{/*+++++++++++++++++++++++++++++++++++++++++++++++++++*//**字段操作*/Field::Field(){}Field::~Field(){}/**是否是數(shù)字*/boolField::IsNum(intnum){if(IS_NUM(m_type[num]))returntrue;elsereturnfalse;}/**是否是數(shù)字*/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;}/**是否為二進(jìn)制數(shù)據(jù)*/boolField::IsBlob(intnum){if(IS_BLOB(m_type[num]))returntrue;elsereturnfalse;}/**是否為二進(jìn)制數(shù)據(jù)*/boolField::IsBlob(stringnum){if(IS_BLOB(m_type[GetField_NO(num)]))returntrue;elsereturnfalse;}/**得到指定字段的序號(hào)*/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的形式返回結(jié)果*/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表結(jié)構(gòu)操作*4數(shù)據(jù)的插入修改*/RecordSet::RecordSet(){res=NULL;row=NULL;pos=0;}RecordSet::RecordSet(MYSQL*hSQL){res=NULL;row=NULL;m_Data=hSQL;pos=0;}RecordSet::~RecordSet(){}/**處理返回多行的查詢,返回影響的行數(shù)*成功返回行數(shù),失敗返回-1*/intRecordSet::ExecuteSQL(constchar*SQL){if(!mysql_real_query(m_Data,SQL,strlen(SQL))){//保存查詢結(jié)果res=mysql_store_result(m_Data);//得到記錄數(shù)量m_recordcount=(int)mysql_num_rows(res);//得到字段數(shù)量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);}//保存所有數(shù)據(jù)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;}/**向下移動(dòng)游標(biāo)*返回移動(dòng)后的游標(biāo)位置*/longRecordSet::MoveNext(){return(++pos);}/*移動(dòng)游標(biāo)*/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;}}}/*移動(dòng)游標(biāo)到開(kāi)始位置*/boolRecordSet::MoveFirst(){pos=0;returntrue;}/*移動(dòng)游標(biāo)到結(jié)束位置*/boolRecordSet::MoveLast(){pos=m_s.size()-1;returntrue;}/*獲取當(dāng)前游標(biāo)位置*/unsignedlongRecordSet::GetCurrentPos()const{returnpos;}/*獲取當(dāng)前游標(biāo)的對(duì)應(yīng)字段數(shù)據(jù)*/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;}/*獲取游標(biāo)的對(duì)應(yīng)字段數(shù)據(jù)*/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;}/*是否到達(dá)游標(biāo)尾部*/boolRecordSet::IsEof(){return(pos==m_s.size())?true:false;}/**得到記錄數(shù)目*/intRecordSet::GetRecordCount(){returnm_recordcount;}/**得到字段數(shù)目*/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);}/**返回指定序號(hào)的記錄*/RecordRecordSet::operator[](intnum){returnm_s[num];}/*--------------------------------------------------*//*+++++++++++++++++++++++++++++++++++++++++++++++++++*//**1負(fù)責(zé)數(shù)據(jù)庫(kù)的連接關(guān)閉*2執(zhí)行sql語(yǔ)句(不返回結(jié)果)*3處理事務(wù)*/DataBase::DataBase(){m_Data=NULL;}DataBase::~DataBase(){if(NULL!=m_Data){DisConnect();}}/*返回句柄*/MYSQL*DataBase::GetMysql(){returnm_Data;}/**主要功能:連接數(shù)據(jù)庫(kù)*參數(shù)說(shuō)明:*1host主機(jī)ip地址或者時(shí)主機(jī)名稱*2user用戶名*3passwd密碼*4db欲連接的數(shù)據(jù)庫(kù)名稱*5port端口號(hào)*6uinx嵌套字*7client_flag客戶連接參數(shù)*返回值: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)){//選擇制定的數(shù)據(jù)庫(kù)失敗if(mysql_select_db(m_Data,db.c_str())<0){mysql_close(m_Data);return-1;}}else{//初始化mysql結(jié)構(gòu)失敗mysql_close(m_Data);return-1;}//成功return0;}/**關(guān)閉數(shù)據(jù)庫(kù)連接*/voidDataBase::DisConnect(){mysql_close(m_Data);}/**主要功能:執(zhí)行非返回結(jié)果查詢*參數(shù):sql待執(zhí)行的查詢語(yǔ)句*返回值;n為成功表示受到影響的行數(shù)-1為執(zhí)行失敗*/intDataBase::ExecQuery(stringsql){if(!mysql_real_query(m_Data,sql.c_str(),(unsignedlong)sql.length())){//得到受影響的行數(shù)return(int)mysql_affected_rows(m_Data);}else{//執(zhí)行查詢失敗return-1;}}/**主要功能:測(cè)試mysql效勞器是否存活*返回值:0表示成功-1失敗*/intDataBase::Ping(){if(!mysql_ping(m_Data))return0;elsereturn-1;}/**主要功能:關(guān)閉mysql效勞器*返回值;0成功-1失敗*/intDataBase::ShutDown(){if(!mysql_shutdown(m_Data,SHUTDOWN_DEFAULT))return0;elsereturn-1;}/**主要功能:重新啟動(dòng)mysql效勞器*返回值;0表示成功-1表示失敗*/intDataBase::ReBoot(){if(!mysql_reload(m_Data))return0;elsereturn-1;}/**說(shuō)明:事務(wù)支持InnoDBorBDB表類型*//**主要功能:開(kāi)始事務(wù)*/intDataBase::Start_Transaction(){if(!mysql_real_query(m_Data,"STARTTRANSACTION",(unsignedlong)strlen("STARTTRANSACTION"))){return0;}else//執(zhí)行查詢失敗return-1;}/**主要功能:提交事務(wù)*返回值:0表示成功-1表示失敗*/intDataBase::Commit(){if(!mysql_real_query(m_Data,"COMMIT",(unsignedlong)strlen("COMMIT"))){return0;}else//執(zhí)行查詢失敗return-1;}/**主要功能:回滾事務(wù)*返回值:0表示成功-1表示失敗*/intDataBase::Rollback(){if(!mysql_real_query(m_Data,"ROLLBACK",(unsignedlong)strlen("ROLLBACK")))return0;else//執(zhí)行查詢失敗return-1;}/*得到客戶信息*/constchar*DataBase::Get_client_info(){returnmysql_get_client_info();}/*主要功能:得到客戶版本信息*/constunsignedlongDataBase::Get_client_version(){returnmysql_get_client_version();}/*主要功能:得到主機(jī)信息*/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);}/*主要功能:得到當(dāng)前連接的默認(rèn)字符集*/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())){//保存查詢結(jié)果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//執(zhí)行查詢失敗p="-1";returnp;}/**得到系統(tǒng)時(shí)間*/constchar*DataBase::GetSysTime(){returnExecQueryGetSingValue("selectnow()");}/**主要功能:建立新數(shù)據(jù)庫(kù)*參數(shù):name為新數(shù)據(jù)庫(kù)的名稱*返回: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//執(zhí)行查詢失敗return-1;}/**主要功能:刪除制定的數(shù)據(jù)庫(kù)*參數(shù):name為欲刪除數(shù)據(jù)庫(kù)的名稱*返回: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//執(zhí)行查詢失敗return-1;}/*-----------------------------------------------------*/};/**使用例子*/#include"zlb_mysql.h"usingnamespacestd;voidmain(){zlb_mysql::DataBasezlb;//連接數(shù)據(jù)庫(kù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)電力貴州工程有限公司招聘筆試參考題庫(kù)含答案解析
- 2025年貴州畢節(jié)市雍福產(chǎn)業(yè)發(fā)展投資集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年江西吉安市永新縣城鄉(xiāng)投資控股集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 二零二五年度綠色生態(tài)棉花種植合作合同4篇
- 二零二五版門(mén)衛(wèi)人員安全應(yīng)急預(yù)案編制合同4篇
- 漳州衛(wèi)生職業(yè)學(xué)院《數(shù)字出版物創(chuàng)作實(shí)訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五版社會(huì)組織委托公益項(xiàng)目管理人員招聘合同3篇
- 張家口學(xué)院《公路工程估價(jià)》2023-2024學(xué)年第一學(xué)期期末試卷
- 棗莊學(xué)院《Spark大數(shù)據(jù)技術(shù)與應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 云南現(xiàn)代職業(yè)技術(shù)學(xué)院《公共管理前沿專題》2023-2024學(xué)年第一學(xué)期期末試卷
- 河道旅游開(kāi)發(fā)合同
- 導(dǎo)尿及留置導(dǎo)尿技術(shù)
- 情人合同范例
- 建筑公司勞務(wù)合作協(xié)議書(shū)范本
- 安徽省合肥市2023-2024學(xué)年高一上學(xué)期物理期末試卷(含答案)
- 《基于杜邦分析法的公司盈利能力研究的國(guó)內(nèi)外文獻(xiàn)綜述》2700字
- 儒家思想講解課程設(shè)計(jì)
- 2024年個(gè)人汽車(chē)抵押借款合同范本(四篇)
- 2024-2025學(xué)年九年級(jí)化學(xué)上冊(cè) 第二單元 單元測(cè)試卷(人教版)
- 軌道交通設(shè)備更新項(xiàng)目可行性研究報(bào)告-超長(zhǎng)期國(guó)債
- 2024-2030年中國(guó)一氧化二氮?dú)怏w行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
評(píng)論
0/150
提交評(píng)論