| #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"); |