Visual C++ 讀寫 MySQL
http://mingxuehi.blog.163.com/blog/static/5681389820091122409324/
看過很多C或是C++操作MySQL資料庫的文章,大部分太吃力了,甚至有一部分根本沒有很好的組織文字,初學者比較難以接受,即使是C++或是C高手也是比較難看懂。寫這篇文章的目的不是別的,就一個,告訴您用MySQL的C API直接操作MySQL資料,並做了比較高效的封裝,可以幫助開發人員大幅度提高採用MySQL的C API操作MySQL資料庫的效率。
直接進入主題:
1、 準備工作
MySQL資料庫安裝之後在\MySQL Server 5.0\lib\opt目錄下有所需要的各種檔案,我們需要的只是以下幾個:
libmysql.lib
libmysql.dll
同時需要\MySQL Server 5.0\include目錄下的幾個檔案:
mysql_version.h
my_list.h
mysql_com.h
mysql_time.h
mysql.h
my_alloc.h
typelib.h
準備Socket的基本檔案
在VC的安裝目錄Microsoft Visual Studio\VC98\Lib下找到:
WS2_32.LIB
把這些檔案先準備好
2、 使用VC的AppWizard建立一個Win32 Console Application,其實可以是Dialog工程或是其他型別工程,比如工程取名CMySQL
3、 把剛才準備好的檔案拷貝你的工程目錄下,和普通的CPP檔案在同一個目錄即可
4、 建立之後,在VC的選單欄點選Project(專案)->Settings(設定),彈出對話方塊,選擇Link標籤進入Link設定,在Object/library modules 的框裡面加入
libmysql.lib[有個空格]WS2_32.LIB
5、 在工程建立新增以下兩個檔案:
第一個檔案標頭檔案:VspdCTOMySQL.h
/****************************MYSQL IN C*******************************/
/*************************2007 -03 -07 *******************************/
/*************************李克喜**************************************/
#include <stdio.h>
#include <string>
#include <afxsock.h>
#include "mysql.h"
using namespace std;
class VspdCToMySQL
{
public:
//變數
MYSQL mysql;
/*
建構函式和稀構函式
*/
VspdCToMySQL();
~VspdCToMySQL();
/*
主要的功能:
初始化資料庫
連線資料庫
設定字符集
入口引數:
host :MYSQL伺服器IP
port:資料庫埠
Db:資料庫名稱
user:資料庫使用者
passwd:資料庫使用者的密碼
charset:希望使用的字符集
Msg:返回的訊息,包括錯誤訊息
出口引數:
int :0表示成功;1表示失敗
*/
int ConnMySQL(char *host,char * port,char * Db,char * user,char* passwd,char * charset,char * Msg);
/*
主要的功能:
查詢資料
入口引數:
SQL:查詢的SQL語句
Cnum:查詢的列數
Msg:返回的訊息,包括錯誤訊息
出口引數:
string 準備放置返回的資料,多條記錄則用0x06隔開,多個欄位用0x05隔開
如果 返回的長度= 0,責表示舞結果
*/
string SelectData(char * SQL,int Cnum ,char * Msg);
/*
主要功能:
插入資料
入口引數
SQL:查詢的SQL語句
Msg:返回的訊息,包括錯誤訊息
出口引數:
int :0表示成功;1表示失敗
*/
int InsertData(char * SQL,char * Msg);
/*
主要功能:
修改資料
入口引數
SQL:查詢的SQL語句
Msg:返回的訊息,包括錯誤訊息
出口引數:
int :0表示成功;1表示失敗
*/
int UpdateData(char * SQL,char * Msg);
/*
主要功能:
刪除資料
入口引數
SQL:查詢的SQL語句
Msg:返回的訊息,包括錯誤訊息
出口引數:
int :0表示成功;1表示失敗
*/
int DeleteData(char * SQL,char * Msg);
/*
主要功能:
關閉資料庫連線
*/
void CloseMySQLConn();
};
第二個檔案實現檔案:VspdCTOMySQL.cpp
/****************************MYSQL IN C*******************************/
/*************************2007 -03 -07 *******************************/
/*************************李克喜**************************************/
#include "stdafx.h"
#include "VspdCTOMySQL.h"
VspdCToMySQL::VspdCToMySQL()
{
}
VspdCToMySQL::~VspdCToMySQL()
{
}
//初始化資料
int VspdCToMySQL::ConnMySQL(char *host,char * port ,char * Db,char * user,char* passwd,char * charset,char * Msg)
{
if( mysql_init(&mysql) == NULL )
{
Msg = "inital mysql handle error";
return 1;
}
if (mysql_real_connect(&mysql,host,user,passwd,Db,0,NULL,0) == NULL)
{
Msg = "Failed to connect to database: Error";
return 1;
}
if(mysql_set_character_set(&mysql,"GBK") != 0)
{
Msg = "mysql_set_character_set Error";
return 1;
}
return 0;
}
//查詢資料
string VspdCToMySQL::SelectData(char * SQL,int Cnum,char * Msg)
{
MYSQL_ROW m_row;
MYSQL_RES *m_res;
char sql[2048];
sprintf(sql,SQL);
int rnum = 0;
char rg = 0x06;//行隔開
char cg = {0x05};//欄位隔開
if(mysql_query(&mysql,sql) != 0)
{
Msg = "select ps_info Error";
return "";
}
m_res = mysql_store_result(&mysql);
if(m_res==NULL)
{
Msg = "select username Error";
return "";
}
string str("");
while(m_row = mysql_fetch_row(m_res))
{
for(int i = 0;i < Cnum;i++)
{
str += m_row[i];
str += rg;
}
str += rg;
rnum++;
}
mysql_free_result(m_res);
return str;
}
//插入資料
int VspdCToMySQL::InsertData(char * SQL,char * Msg)
{
char sql[2048];
sprintf(sql,SQL);
if(mysql_query(&mysql,sql) != 0)
{
Msg = "Insert Data Error";
return 1;
}
return 0;
}
//更新資料
int VspdCToMySQL::UpdateData(char * SQL,char * Msg)
{
char sql[2048];
sprintf(sql,SQL);
if(mysql_query(&mysql,sql) != 0)
{
Msg = "Update Data Error";
return 1;
}
return 0;
}
//刪除資料
int VspdCToMySQL::DeleteData(char * SQL,char * Msg)
{
char sql[2048];
sprintf(sql,SQL);
if(mysql_query(&mysql,sql) != 0)
{
Msg = "Delete Data error";
return 1;
}
return 0;
}
//關閉資料庫連線
void VspdCToMySQL::CloseMySQLConn()
{
mysql_close(&mysql);
}
6、 在main函式,(如果是其他工程級不是main了,可能是一個按鈕裡面的程式碼塊)新增 一些程式碼,新增之後如下:
#include "stdafx.h"
#include "VspdCTOMySQL.h"
int main(int argc, char* argv[])
{
char* host="MYSQL伺服器IP";
char* user="root";
char* port ="3306";
char* passwd="使用者密碼";
char* dbname="資料庫名稱";
char* charset = "GBK";//支援中文
char* Msg = "";//訊息變數
//初始化
VspdCToMySQL * vspdctomysql = new VspdCToMySQL;
if(vspdctomysql->ConnMySQL(host,port,dbname,user,passwd,charset,Msg) == 0)
printf("連線成功\r\n");
else
printf(Msg);
//查詢
char * SQL = "SELECT ids,username,passwd,address FROM vcaccesstest";
string str = vspdctomysql->SelectData(SQL,4,Msg);
if( str.length() > 0 )
{
printf("查詢成功\r\n");
printf(str.data());
printf("\r\n");
}
else
{
printf(Msg);
}
//插入
SQL = "insert into vcaccesstest(ids,username,passwd,address) values(4,'我的','123210','測試地址')";
if(vspdctomysql->InsertData(SQL,Msg) == 0)
printf("插入成功\r\n");
//更新
SQL = "update vcaccesstest set username = '修改了',passwd='2345' where ids = 3 ";
if(vspdctomysql->UpdateData(SQL,Msg) == 0)
printf("更新成功\r\n");
//刪除
SQL = "delete from vcaccesstest where ids = 3 ";
if(vspdctomysql->DeleteData(SQL,Msg) == 0)
printf("刪除成功\r\n");
vspdctomysql->CloseMySQLConn();
return 0;
}
7、 資料庫表確認表存在,(程式中的表和欄位是我的資料庫裡面的內容,你要自己搞定你的SQL語句了,你可以看main函式裡面的SQL變數的內容。
8、 編譯,執行,一切ok。
9、 總結,你要做的事情很少了,兩個主要的檔案寫好了,你看例子呼叫即可,其他MySQL的庫檔案和附加檔案別人也為您準備好了,移植到其他系統也是很簡單的,比如移植到Linux和Unix下也是很簡單的,VspdCTOMySQL.h和VspdCTOMySQL.cpp基本上是採用標準的C++編寫的,在別的系統可能需要做少量修改即可。
相關文章
- C++讀寫檔案C++
- C++檔案讀寫C++
- c++中的讀寫鎖C++
- C/C++ 檔案讀寫C++
- C++讀寫檔案操作C++
- C++檔案讀寫操作C++
- json的使用(python寫,c++讀)JSONPythonC++
- mfc 讀寫 excel 示例 C++ libxlExcelC++
- 精通Visual C++圖象程式設計------讀書筆記8C++程式設計筆記
- 精通Visual C++圖象程式設計---讀書筆記6.2C++程式設計筆記
- 精通Visual C++圖象程式設計---讀書筆記6.1C++程式設計筆記
- 精通Visual C++圖象程式設計---讀書筆記5C++程式設計筆記
- Python安裝MySQL庫詳解(解決Microsoft Visual C++ 9.0 is required )PythonMySqlROSC++UI
- Use any C++ Compiler with Visual StudioC++Compile
- C++學習筆記----讀寫檔案C++筆記
- 【C++基礎】檔案流讀寫操作C++
- Visual Studio Code (vscode) 配置C、C++環境/編寫執行C、C++(Windows)【真正的小白版】VSCodeC++Windows
- MySQL 讀寫分離的好處MySql
- Java mysql blob 資料讀寫操作JavaMySql
- mysql優化之讀寫分離MySql優化
- ProxySQL實現MySQL讀寫分離MySql
- 探究MySQL MGR的讀寫分離MySql
- mysql讀寫分離的最佳實踐MySql
- MySQL 官宣:支援讀寫分離了!!MySql
- MYSQL 主從 + ATLAS 讀寫分離 搭建MySql
- MySQL cetus 中介軟體 讀寫分離MySql
- 配置\清除 MySQL 主從 讀寫分離MySql
- Mysql 高可用(MHA)-讀寫分離(Atlas)MySql
- MySQL MyISAM引擎的讀鎖與寫鎖MySql
- Mysql之讀寫分離架構-AtlasMySql架構
- MySQL主從複製讀寫分離MySql
- VISUAL-STUDIO(2022)-透過Visual Studio Installer新增C++工作負載C++負載
- gevent安裝錯誤解決方案:Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools"ROSC++UI
- visual studio原生支援C++的含義C++
- Visual Studio C++ 安裝以及使用教程C++
- 使用 Visual C++ 的 Office 自動化C++
- 線上MySQL讀寫分離,出現寫完讀不到問題如何解決MySql
- Kubernetes 中實現 MySQL 的讀寫分離MySql
- [Mysql]主從複製和讀寫分離MySql