c++ 操作Mysql ado

來源:互聯網
上載者:User

標籤:

#pragma once#ifndef DB_MYSQL_H#define DB_MYSQL_H #include "stdafx.h"#include <winsock2.h>#include "include/mysql.h"#include <map> #include <vector>#include <iostream>using namespace std;typedef map<CString, CString > strMap;/*key: 欄位 value: 值*/ class CDBMYSQL{public:CDBMYSQL(CString szHost, CString szUser, CString szPassword, unsigned int port,CString szCharacter);// 建構函式CDBMYSQL(); //建構函式 ~CDBMYSQL();//解構函式protected:MYSQL *m_pMYSQL; //代表一個到資料庫的串連private:CString m_szHost; //已連線的服務器CString m_szUser; //使用者名稱CString m_szPassword; //串連密碼CString m_szCharacter;unsigned int m_iPort; //串連連接埠CString m_szDbName; //操作的資料庫的名稱MYSQL_RES *m_pResult; //操作的結果CString m_szQuery; //sql語句unsigned long m_lNum; //返回查詢得到的結果數CString m_szError; //錯誤提示資訊unsigned int m_iDebug; //是否顯示調試資訊strMap m_Info; //查詢語句返回一條結果vector<strMap>  m_vectorInfo; //查詢語句可能會返回多條結果vector<CString> m_vectorFields; //返回查詢結果的列void DisPlayError();public: unsigned int DBConnect();//串連資料庫unsigned int DBSelect(CString szDB); //串連一個資料庫void SetQuery(CString szQuery); //設定查詢語句unsigned int DBQuery(); //查詢資料庫strMap GetInfo(); //返回查詢得到的一條結果vector<strMap> GetArray(); //返回查詢得到的結果CString GetError(); //返回錯誤資訊vector<CString> GetFields();//返回查詢後的列值unsigned int InsertData(CString table,strMap *data); //向資料庫中插入一條資料unsigned long GetLastID(); //返回最後一個自動增量的值unsigned long GetRowNum(); //返回一條sql語句影響的行數unsigned int UpdateData(CString table,strMap *data,CString condition); //根據條件修改一條資料unsigned int DeleteData(CString table,CString condition); //根據條件刪除資料 };  #endif 

哥修改的他人寫的一套c++ 操作Mysql ado

 

 

#include "DBMYSQL.h"

 

 

CDBMYSQL::CDBMYSQL()

{

}

 

/*建構函式,設定已連線的服務器,使用者名稱,密碼和連接埠*/

CDBMYSQL::CDBMYSQL(CString szHost, CString szUser, CString szPassword, unsigned int iPort=3306, CString szCharacter = "UTF8")

{

m_pMYSQL = mysql_init(NULL);

m_lNum = 0;

m_szError="";

m_szQuery="";

m_pResult = NULL;

m_szCharacter = szCharacter;

 CDBMYSQL::m_szHost= szHost;

CDBMYSQL::m_szUser= szUser;

CDBMYSQL::m_szPassword= szPassword;

CDBMYSQL::m_iPort= iPort;

CDBMYSQL::m_szCharacter = szCharacter;

 

}

 

/*解構函式*/

CDBMYSQL::~CDBMYSQL()

{

if(m_pResult != NULL)

mysql_free_result(m_pResult);

m_vectorFields.clear();

m_szError = "";

m_vectorInfo.clear();

m_szDbName = "";

m_vectorInfo.clear();

mysql_close(m_pMYSQL);

}

 

 

/*串連資料庫*/

unsigned int CDBMYSQL::DBConnect()

{

MYSQL *con;

if(m_pMYSQL == NULL) 

{

m_szError = "初始化mysql錯誤";

return 1;

}

con = mysql_real_connect(m_pMYSQL, m_szHost.GetBuffer(0), m_szUser.GetBuffer(0), m_szPassword.GetBuffer(0), NULL, m_iPort,NULL,0);

if(con == NULL)

{

m_szError=mysql_error(m_pMYSQL);

return mysql_errno(m_pMYSQL);

}

mysql_set_character_set(m_pMYSQL, m_szCharacter);

return 0;

}

 

/*選擇一個資料庫*/

unsigned int CDBMYSQL::DBSelect(CString szDataBase)

{

unsigned int iRet;

if( m_pMYSQL == NULL) return 1;

m_szDbName = szDataBase;

iRet = mysql_select_db(m_pMYSQL,m_szDbName.GetBuffer(0));

if(iRet != 0)

{

m_szError += mysql_error(m_pMYSQL);

}

return iRet;

}

 

 

 

/*設定sql語句*/

void CDBMYSQL::SetQuery(CString szQuery)

{

ASSERT(!szQuery.IsEmpty());

if(m_pResult != NULL ) 

{

mysql_free_result(m_pResult);

}

m_szQuery = szQuery;

}

 

/*執行sql語句*/

unsigned int CDBMYSQL::DBQuery()

{

unsigned int iRet;

if( m_pMYSQL == NULL) return 1;

ASSERT(!m_szQuery.IsEmpty());

iRet = mysql_query(m_pMYSQL,m_szQuery.GetBuffer());

if(iRet == 0)

{

m_pResult = mysql_store_result(m_pMYSQL);

m_lNum = mysql_affected_rows(m_pMYSQL);

m_Info.clear();

m_vectorInfo.clear();

m_vectorFields.clear();

else

{

iRet = mysql_errno(m_pMYSQL);

m_szError = mysql_error(m_pMYSQL);

cout<<m_szError<<endl;

}

return iRet;

}

 

/*擷取查詢得到的一條結果*/

strMap CDBMYSQL::GetInfo()

{

MYSQL_ROW row;

unsigned int i;

ASSERT(m_pMYSQL != NULL);

if(m_Info.size() > 0) return m_Info;

if(m_pResult != NULL)

{

GetFields();

row = mysql_fetch_row(m_pResult);

if(row != NULL)

 for(i=0;i<m_vectorFields.size();i++)

 m_Info[m_vectorFields[i]] = (char*)row[i];

  }

return m_Info;

}

 

 

/*擷取查詢得到的所有結果*/

vector<strMap> CDBMYSQL::GetArray()

{

MYSQL_ROW row;

unsigned int i;

strMap tmp;

ASSERT(m_pMYSQL != NULL);

if(m_vectorInfo.size() > 0) return m_vectorInfo;

if(m_pResult != NULL)

{

GetFields();

while(row = mysql_fetch_row(m_pResult))

{

if(row != NULL)

{

for(i=0;i<m_vectorFields.size();i++)

{

tmp[m_vectorFields[i]] = (char *)row[i];

}

m_vectorInfo.push_back(tmp);

}

}

}

return m_vectorInfo;

}

 

/*擷取sql語句執行影響的行數*/

unsigned long CDBMYSQL::GetRowNum()

{

return m_lNum;

}

 

/*擷取插入後的id號*/

unsigned long CDBMYSQL::GetLastID()

{

return mysql_insert_id(m_pMYSQL);

}

 

/*向資料庫插入資料*/

unsigned int CDBMYSQL::InsertData(CString szTable,strMap *pData)

{

strMap::const_iterator iter;

CString szQuery;

int iFlag=0;

ASSERT(m_pMYSQL != NULL);

ASSERT(!szTable.IsEmpty());

ASSERT(pData != NULL);

for(iter = pData->begin(); iter!= pData->end(); iter++)

{

if(iFlag == 0)

{

szQuery = "insert into ";

szQuery += szTable;

szQuery += " set ";

szQuery += iter->first;

szQuery += " =  ‘";

szQuery += iter->second;

szQuery += "‘";

iFlag++;

else

{

szQuery += ",";

szQuery += iter->first;

szQuery += "= ‘";

szQuery += iter->second;

szQuery += "‘";

}

}

SetQuery(szQuery);

return DBQuery();

}

 

/*根據條件修改資料*/

unsigned int CDBMYSQL::UpdateData(CString szTable, strMap *pDataMap, CString szCondition)

{

strMap::const_iterator iter;

CString szQuery;

int iFlag = 0;

ASSERT(m_pMYSQL != NULL);

ASSERT(!szTable.IsEmpty());

ASSERT(pDataMap != NULL);

for(iter = pDataMap->begin(); iter!= pDataMap->end(); iter++)

{

if(iFlag == 0)

{

szQuery = " update ";

szQuery += szTable;

szQuery += " set ";

szQuery += iter->first;

szQuery += " = ‘";

szQuery += iter->second;

szQuery += "‘";

iFlag++;

else

{

szQuery += ",";

szQuery += iter->first;

szQuery += "=‘";

szQuery += iter->second;

szQuery += "‘";

}

}

 

if(szCondition.IsEmpty() != 0)

{

szQuery += " where ";

szQuery += szCondition;

}

SetQuery(szQuery);

return DBQuery();

}

 

 

 

 

/*根據條件刪除資料*/

unsigned int CDBMYSQL::DeleteData(CString szTable, CString szCondition)

{

CString szQuery;

ASSERT(m_pMYSQL != NULL);

ASSERT(!szTable.IsEmpty());

szQuery = " delete from ";

szQuery += szTable;

if(szCondition!="")

{

szQuery += " where ";

szQuery += szCondition;

}

SetQuery(szQuery);

return DBQuery();

}

 

/*擷取返回的錯誤資訊*/

CString CDBMYSQL::GetError()

{

return m_szError;

}

 

/*返回查詢後的列值*/

vector<CString> CDBMYSQL::GetFields()

{

 MYSQL_FIELD *field;

ASSERT(m_pMYSQL != NULL);

if(m_vectorFields.size()>0) return m_vectorFields;

while(field = mysql_fetch_field(m_pResult))

 m_vectorFields.push_back(field->name);

 return m_vectorFields;

}

 

 

 

 

 

// 查詢

CDBMYSQL *pDbMySQL = new CDBMYSQL("127.0.0.1", "root", "root", 3306, "gbk");

pDbMySQL->DBConnect();

pDbMySQL->DBSelect("demo");

pDbMySQL->SetQuery("select * from customer");

pDbMySQL->DBQuery();

vector<strMap> info = pDbMySQL->GetArray();

for (int i = 0; i < info.size(); i++)

{

TRACE("username = %s  solution =%s \r\n", info[i]["id"], info[i]["username"]);

}

strMap map;

map["username"] = "xs強";

map["company"] = "xxx投資";

pDbMySQL->UpdateData("customer",&map,"where id = 1");

 

 

map["id"] = "3";

map["username"] = "邵學成";

map["company"] = "xzxxx投資有限公司";

map["solutation"] = "先生";

map["phone"] = "136401273005";

map["mobile"] = "13640123005";

map["source"] = "同事";

map["sdate"] = "2011-11-1";

map["job"] = "程式員";

map["web"] = "71945221120";

map["email"] = "[email protected]";

map["createtime"] = "2010-11-04 21:11:59";

map["modifiedtime"] = "2010-11-04 21:11:59";

map["note"] = "一sx";

 

pDbMySQL->InsertData("customer",&map);

 

 

pDbMySQL->DeleteData("customer","  id=1");

c++ 操作Mysql ado

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.