MySQL-C++封裝類
MySQLInterface.h:
// MySQLInterface // 功能描述:實現對MySQL訪問操作的封裝 #ifndef __MYSQL_INTERFACE_H__ #define __MYSQL_INTERFACE_H__ #include <string> #include <vector> #include <winsock.h> // 遠端訪問 #include "MySQL/include/mysql.h" // 引入相關庫 #pragma comment(lib, "ws2_32.lib") #pragma comment(lib, "MySQL/lib/libmysql.lib") #define ERROR_QUERY_FAIL -1 // 操作失敗 // 定義MySQL連線資訊 typedef struct { char* server; char* user; char* password; char* database; int port; }MySQLConInfo; class MySQLInterface { public: MySQLInterface(); virtual ~MySQLInterface(); void SetMySQLConInfo(char* server, char* username, char* password, char* database, int port);// 設定連線資訊 bool Open(); // 開啟連線 void Close(); // 關閉連線 bool Select(const std::string& Querystr, std::vector<std::vector<std::string> >& data); // 讀取資料 bool Query(const std::string& Querystr); // 其他操作 int GetInsertID(const std::string& Querystr);// 插入並獲取插入的ID,針對自動遞增ID void ErrorIntoMySQL(); // 錯誤訊息 public: int ErrorNum; // 錯誤代號 const char* ErrorInfo; // 錯誤提示 private: MySQLConInfo MysqlConInfo; // 連線資訊 MYSQL MysqlInstance; // MySQL物件 MYSQL_RES *Result; // 用於存放結果 }; #endif
MySQLInterface.cpp:
#include "stdafx.h" #include "MySQLInterface.h" MySQLInterface::MySQLInterface() : ErrorNum(0), ErrorInfo("ok") { mysql_library_init(0, NULL, NULL); mysql_init(&MysqlInstance); // 設定字符集,否則無法處理中文 mysql_options(&MysqlInstance, MYSQL_SET_CHARSET_NAME, "gbk"); } MySQLInterface::~MySQLInterface() { } // 設定連線資訊 void MySQLInterface::SetMySQLConInfo(char* server, char* username, char* password, char* database, int port) { MysqlConInfo.server = server; MysqlConInfo.user = username; MysqlConInfo.password = password; MysqlConInfo.database = database; MysqlConInfo.port = port; } // 開啟連線 bool MySQLInterface::Open() { if (mysql_real_connect(&MysqlInstance, MysqlConInfo.server, MysqlConInfo.user, MysqlConInfo.password, MysqlConInfo.database, MysqlConInfo.port, 0, 0) != NULL) { return true; } else { ErrorIntoMySQL(); return false; } } // 斷開連線 void MySQLInterface::Close() { mysql_close(&MysqlInstance); } //讀取資料 bool MySQLInterface::Select(const std::string& Querystr, std::vector<std::vector<std::string> >& data) { if (0 != mysql_query(&MysqlInstance, Querystr.c_str())) { ErrorIntoMySQL(); return false; } Result = mysql_store_result(&MysqlInstance); // 行列數 int row = mysql_num_rows(Result); int field = mysql_num_fields(Result); MYSQL_ROW line = NULL; line = mysql_fetch_row(Result); int j = 0; std::string temp; std::vector<std::vector<std::string> >().swap(data); while (NULL != line) { std::vector<std::string> linedata; for (int i = 0; i < field; i++) { if (line[i]) { temp = line[i]; linedata.push_back(temp); } else { temp = ""; linedata.push_back(temp); } } line = mysql_fetch_row(Result); data.push_back(linedata); } return true; } // 其他操作 bool MySQLInterface::Query(const std::string& Querystr) { if (0 == mysql_query(&MysqlInstance, Querystr.c_str())) { return true; } ErrorIntoMySQL(); return false; } // 插入並獲取插入的ID,針對自動遞增ID int MySQLInterface::GetInsertID(const std::string& Querystr) { if (!Query(Querystr)) { ErrorIntoMySQL(); return ERROR_QUERY_FAIL; } // 獲取ID return mysql_insert_id(&MysqlInstance); } //錯誤資訊 void MySQLInterface::ErrorIntoMySQL() { ErrorNum = mysql_errno(&MysqlInstance); ErrorInfo = mysql_error(&MysqlInstance); }
Example
#include <iostream> using namespace std; #include "MySQLInterface.h" int _tmain(int argc, _TCHAR* argv[]) { MySQLInterface MySQLInterface; MySQLInterface.SetMySQLConInfo("localhost", "root", "123456", "world", 337); if (!MySQLInterface.Open()) { std::cout << MySQLInterface.ErrorNum << " : " << MySQLInterface.ErrorInfo << std::endl; } // 讀取資料 std::vector<std::vector<std::string> > data; std::string sqlstr = "SELECT `ID`,`Name`,`CountryCode`,`District` FROM `world`.`city` LIMIT 10"; MySQLInterface.Select(sqlstr, data); // 顯示資料 for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[0].size(); ++j) { cout << data[i][j] << "\t\t"; } cout << endl; } // 其他操作 sqlstr = "CREATE TABLE IF NOT EXISTS `new_paper` ("; sqlstr += " `NewID` int(11) NOT NULL AUTO_INCREMENT,"; sqlstr += " `NewCaption` varchar(40) NOT NULL,"; sqlstr += " `NewContent` text,"; sqlstr += " `NewTime` datetime DEFAULT NULL,"; sqlstr += " PRIMARY KEY(`NewID`)"; sqlstr += " ) ENGINE = InnoDB DEFAULT CHARSET = utf8"; if (!MySQLInterface.Query(sqlstr)) { std::cout << MySQLInterface.ErrorNum << " : " << MySQLInterface.ErrorInfo << std::endl; } MySQLInterface.Close(); system("pause"); return 0; } |
錯誤提示
MFC (CString)
if (!m_MySQLInter.Open()) // 連線失敗 { CString strError = _T(""); USES_CONVERSION; strError.Format(_T("開啟資料庫失敗...\n%d : %s"), m_MySQLInter.ErrorNum, A2W(m_MySQLInter.ErrorInfo)); ::MessageBox(GetSafeHwnd(), strError, _T("系統提示"), MB_ICONEXCLAMATION | MB_OK); return; } |
Win32
if(!m_MySQLInter.Open())
{
std::cout<< m_MySQLInter.ErrorNum << " : " <<m_MySQLInter.ErrorInfo << std::endl;
return;
}
型別轉換
Std::string to char*
// 型別轉換 char* pDatabase = new char[strlen(database.c_str()) + 1]; strcpy(pDatabase, database.c_str()); char* pPassword = new char[strlen(password.c_str()) + 1]; strcpy(pPassword, password.c_str()); char* pUserName = new char[strlen(usename.c_str()) + 1]; strcpy(pUserName, usename.c_str()); char* pServer = new char[strlen(server.c_str()) + 1]; strcpy(pServer, server.c_str()); m_MySQLInter.SetMySQLConInfo(pServer, pUserName, pPassword, pDatabase, port); |
CString to char*
USES_CONVERSION; m_MySQLInter.SetMySQLConInfo(W2A(m_strServer), W2A(m_strUserName), W2A(m_strPassword), "log", _ttoi(m_strPort)); if (!m_MySQLInter.Open()) // 連線失敗 { CString strError = _T(""); USES_CONVERSION; strError.Format(_T("開啟資料庫失敗...\n%d : %s"), m_MySQLInter.ErrorNum, A2W(m_MySQLInter.ErrorInfo)); ::MessageBox(GetSafeHwnd(), strError, _T("系統提示"), MB_ICONEXCLAMATION | MB_OK); return; } |
相關推薦
MySQL-C++封裝類
MySQLInterface.h: // MySQLInterface // 功能描述:實現對MySQL訪問操作的封裝 #ifndef __MYSQL_INTERFACE_H__ #define __MYSQL_INTERFACE_H__ #include &
mysql的c++封裝類
//.h ////////////////////////////////////////////////////////////////////////////////// CppMysql - A C++ wrapper around the mysql database
multi-reactor伺服器模型的C++封裝類(libevent+多執行緒實現)
最近在看memcached的原始碼,覺得它那種libevent+多執行緒的伺服器模型(multi-reactor)真的很不錯,我將這個模型封裝成一個C++類,根據我的簡單測試,這個模型的效率真的很不錯,歡迎大家試用。 這個類的使用方法很簡單(缺點是不太靈活),只
SQLite3資料庫Native C++封裝類(Unicode)CppSQLite3U的初步認識與使用
SQLite3資料庫Native C++封裝類(Unicode)CppSQLite3U的初步認識與使用 by斜風細雨QQ:253786989 2012-02-12 (1) 從上面的網址可以找到對SQLite資料庫的C API的各種語言的封裝。包括c、c+
log4net的C#封裝類
log4net是net界知名的日誌管理系統,開源的。它的用法適合各種環境異常、錯誤、日誌等的記錄和管理,但是同樣它諸多的方法函式讓初學者望而生畏。這裡的C#封裝類實現了log4net的二次封裝,對於日常的日誌管理足夠便利了。 封裝說明: 1.使用靜態方法呼叫即可寫入日
封裝類之MYSQLHelper(C#連線MySql資料庫)
using System; using System.Collections; using System.Configuration; using MySql.Data; using MySql.Data.MySqlClient; using System.Da
C++ 用類封裝實現隊列
pan pub pre () turn ear als sin push 1 #include<stdlib.h> 2 #include <iostream> 3 using std::cout; 4 using std::end
C#封裝CRUD到SqlHelper類解讀
方便 object esc 參數 span tar 找到 area command 1、簡單說明一下,一般情況下,數據庫連接字符串是在App.config文件中進行配置,然後再在代碼中進行引用。因此,我們在這裏先看一下App.config文件。 首先看需要添加的內容: 參數
C++ log4cplus 類庫的封裝
pat get 全局 attach ins 日誌 erro def ring 對 log4cplus 庫的封裝,修改自網路 LogUtils.h /* * LogUtils.h * * Created on: 2018年8月9日 * Author: o
C 操作Redis 簡單封裝類
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
MySQL的C++封裝
最近的專案資料庫管理系統從SQL SERVER2000遷移到了MySQL上來,之前基於ADO的連線方式連線上SQL SERVER,使用MySQL資料庫管理系統之後,直接在MySQL的C語言的API上以面向物件的方式封裝實現了資料庫的建立,表的建立,資料庫的讀寫操作快速搭建原型,目前沒有新增連線池模組
PHP自己封裝一個原生mysql資料庫工具類--進階常用類仿PDO模式
<?php header('content-type:text/html;charset=utf-8'); error_reporting(E_ALL ^ E_DEPRECATED); // 設計一個mysql資料庫操作類 $config=array( 'hos
PHP自己封裝一個原生mysql資料庫工具類--基礎類
程式碼都是剛從自己編輯器上拷貝下來的,可以直接複製黏貼執行。 <?php header('content-type:text/html;charset=utf-8'); error_reporting(E_ALL ^ E_DEPRECATED); // 設計一個mysql資料庫操作類 $
日曆---C++封裝一個Date類,Calendar類,實現簡單的日曆+日期計算器程式
C++封裝一個Date類,實現簡單的日曆程式 程式程式碼如下: Date.h #include<iostream> using namespace std; class Date { public: Date(int year = 200
c++:類與物件,封裝,訪問限定符,預設成員函式
到底什麼是類?什麼是物件? 類是一個抽象的概念,它不存在於現實中的時間/空間裡,類只是為所有的物件定義了抽象的屬性與行為。 類是一個靜態的概念,類本身不攜帶任何
[C#原始碼]網路資料流讀寫封裝類,支援多執行緒下同時讀和寫,自動資源管理,字串分隔符\r\n
using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using Syst
C# 封裝的功能強大的中國農曆日曆操作類的程式碼
將程式碼過程經常用的程式碼片段備份一下,下邊資料是關於C# 封裝的功能強大的中國農曆日曆操作類的程式碼,希望能對大夥有些用途。 private static int leapDays(int y) { if (leapMonth(y) != 0) {
C 操作Redis 簡單封裝類
#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <winsock2.h>#include <iostre
PHP自己封裝一個原生mysql資料庫工具類--進階常用類
<?php header('content-type:text/html;charset=utf-8'); error_reporting(E_ALL ^ E_DEPRECATED); // 設計一個mysql資料庫操作類 $config=array( 'h
C++封裝的日期和時間類
C++封裝的時間和日期類,方便的操作時間。包括時間段、日期類、時間類。支援 時間/日期 加/減/比較,時間戳/字串 相互轉換。 一個包含三個類:Duration、Date、Time。 Duration 表示一個時間段 Date 表示一個日期,精確到秒,比如20