本篇文章給大家分享的是有關(guān)c++中怎么實現(xiàn)一個MySQL通用類,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、烏魯木齊網(wǎng)絡(luò)推廣、小程序開發(fā)、烏魯木齊網(wǎng)絡(luò)營銷、烏魯木齊企業(yè)策劃、烏魯木齊品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供烏魯木齊建站搭建服務(wù),24小時服務(wù)熱線:028-86922220,官方網(wǎng)址:chinadenli.net
常用的函數(shù)
初始化API庫:mysql_library_init()
初始化數(shù)據(jù)結(jié)構(gòu):mysql_init()
連接數(shù)據(jù)庫前的選項:mysql_options()
錯誤信息:mysql_error()
連接函數(shù):mysql_real_connect()
執(zhí)行SQL語句:mysql_query()
轉(zhuǎn)存查詢結(jié)果:mysql_store_result()
關(guān)閉連接:mysql_close()
dbctrl.h
#ifndef __DBCTRL_H__
#define __DBCTRL_H__
#include "winsock.h"
#include "iostream.h"
#include <string>
#include "mysql.h"
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "libmysql.lib")
using namespace std;
class DBctrl
{
private:
MYSQL mydata; //MySQL對象,必備的一個數(shù)據(jù)結(jié)構(gòu)
MYSQL_RES *result; //用于存放結(jié)果 建議用char* 數(shù)組將此結(jié)果轉(zhuǎn)存
public:
int row; //查詢結(jié)果的行數(shù)
int field; //查詢結(jié)果的列數(shù)
int autoNum; //上一次auto_increment的值
int errorNum; //錯誤代號
const char* errorInfo; //錯誤提示
int affectedRow; //上一次查詢影響的行數(shù)
DBctrl(); //構(gòu)造函數(shù)
void DBtest(int flag);
void DBerror();
void DBconn(char* server, char* username, char* password, char* database,int port);
void DBquery(string queryStr);
void DBquery(string queryStr, char* data[100][100]);
void DBclose();
};
#endifdbctrl.cpp
#include "dbctrl.h"
//構(gòu)造函數(shù) 初始化各個變量和數(shù)據(jù)
DBctrl::DBctrl()
{
mysql_library_init(0,NULL,NULL);
mysql_init(&mydata);
mysql_options(&mydata,MYSQL_SET_CHARSET_NAME,"gbk");
row=0;
field=0;
autoNum=0;
errorNum=0;
errorInfo="ok";
affectedRow=0;
}
//編譯時顯示測試信息,正式使用時把此函數(shù)主題注釋掉即可
void DBctrl::DBtest(int flag)
{
char* message;
switch (flag)
{
case 1:
message="Database OK!";
break;
case 2:
message="Database error!";
break;
case 3:
message="Query OK!";
break;
case 4:
message="Query error!";
break;
case 5:
message="data overflew!";
break;
default:
message=NULL;
break;
}
if (message!=NULL) cout<<message<<endl;
}
//收集錯誤信息
void DBctrl::DBerror()
{
errorNum=mysql_errno(&mydata);
errorInfo=mysql_error(&mydata);
}
//連接數(shù)據(jù)庫
void DBctrl::DBconn(char* server, char* username, char* password, char* database,int port)
{
char* svr=server; //server:服務(wù)器域名或IP
char* usr=username; //username:數(shù)據(jù)庫用戶名
char* pwd=password; //password:數(shù)據(jù)庫密碼
char* dbn=database; //database:數(shù)據(jù)庫名
int prt=port; //port:端口號
//這里新建變量并再賦一次值是為了調(diào)試的時候顯示連接參數(shù),其實可以不這么做
if(mysql_real_connect(&mydata,svr,usr,pwd,dbn,prt,0,0) != NULL)
DBtest(1);
else
DBtest(2);
}
//執(zhí)行查詢語句
void DBctrl::DBquery(string queryStr)
{
if(0==mysql_query(&mydata,queryStr.c_str()))
DBtest(3);
else
DBtest(4);
DBerror();
}
//執(zhí)行查詢語句(重載,有返回結(jié)果的)
void DBctrl::DBquery(string queryStr, char* data[100][100])
{
if(0==mysql_query(&mydata,queryStr.c_str()))
DBtest(3);
else
DBtest(4);
affectedRow=mysql_affected_rows(&mydata);
autoNum=mysql_insert_id(&mydata);
result=mysql_store_result(&mydata);
row=mysql_num_rows(result);//計算行數(shù)
field=mysql_num_fields(result);//計算列數(shù)
//轉(zhuǎn)出數(shù)據(jù)
if(row>100 || field>100)
DBtest(5);
else
{
MYSQL_ROW line=NULL;
line=mysql_fetch_row(result);//取第一行結(jié)果
int j=0;
while(NULL!=line)//查看是否為空行,是則結(jié)束,否則將這一行的數(shù)據(jù)轉(zhuǎn)存到data的一行中并取下一行
{
for(int i=0; i<field;i++)
{
data[j][i]=line[i];
}
j++;
line=mysql_fetch_row(result);
}
}
DBerror();
}
//斷開連接
void DBctrl::DBclose()
{
mysql_close(&mydata);
}主體
#include "dbctrl.h"
void main()
{
DBctrl my; //剛才建的通用類
string query; //存放查詢語句
char* data[100][100]; //存放查詢結(jié)果
query="Select * from table1";
my.DBconn("localhost","root","123456","test",3306);
my.DBquery(query,data); //執(zhí)行query中的語句,并將結(jié)果回送給data
my.DBclose(); //關(guān)閉連接
/* 此處用for循環(huán)顯示data數(shù)組的內(nèi)容... */
}以上就是c++中怎么實現(xiàn)一個mysql通用類,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
當前題目:c++中怎么實現(xiàn)一個mysql通用類
本文來源:http://chinadenli.net/article10/gejcgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、網(wǎng)站內(nèi)鏈、移動網(wǎng)站建設(shè)、響應式網(wǎng)站、企業(yè)建站、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)