




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
用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年應急管理與安全科學考試試題及答案
- 2025年社會福利與社會保障考試試卷及答案
- 2025年提升職場能力的綜合素質考試試卷及答案
- 2025年商法與合同法的基礎知識能力測試卷及答案
- 2025年企業財務分析師職業能力測試題及答案
- 2025年計算機程序設計基礎考試題及答案
- 2025年法醫學與犯罪學相關知識測試題及答案
- 2025年甘肅省天水市投資發展(集團)有限公司招聘筆試參考題庫及參考答案詳解一套
- 2025年甘肅省特崗教師招聘2261人筆試參考題庫及答案詳解一套
- 特殊場所疫情管理制度
- 2025年廣西公需科目答案02
- 2023年全國青少年航天知識大賽題庫
- 機電設備運輸裝卸方案
- 4.2.1指數函數的概念 課件(共21張PPT)
- 國家標準版藥學專業知識(一)藥理
- 醫用耗材一次性使用申請表
- 第五課古典芭蕾(芭蕾舞鼎盛時期)
- 中小學生肥胖調查表
- 胃癌HER2判讀及評分課件
- 中儲糧警示教育心得體會三篇
- 船用空調電氣控制系統簡介課件
評論
0/150
提交評論