c mysql通用类_c++ 自制mysql通用 类 | 学步园

有了MySQL API的支持,C++是连上数据库了,可是每次都去查API函数表,总是比较麻烦的……为了体现“代码重用”思想,你可以为自己做一个调用MySQL的类,把繁琐的操作封装成简单的函数,为今后使用做准备。

常用的函数

初始化API库:mysql_library_init()

初始化数据结构:mysql_init()

连接数据库前的选项:mysql_options()

错误信息:mysql_error()

连接函数:mysql_real_connect()

执行SQL语句:mysql_query()

转存查询结果:mysql_store_result()

关闭连接:mysql_close()

dbctrl.h

#ifndef __DBCTRL_H__

#define __DBCTRL_H__

#include "winsock.h"

#include "iostream.h"

#include

#include "mysql.h"

#pragma comment(lib, "ws2_32.lib")

#pragma comment(lib, "libmysql.lib")

using namespace std;

class DBctrl

{

private:

MYSQL mydata; //MySQL对象,必备的一个数据结构

MYSQL_RES *result; //用于存放结果 建议用char* 数组将此结果转存

public:

int row; //查询结果的行数

int field; //查询结果的列数

int autoNum; //上一次auto_increment的值

int errorNum; //错误代号

const char* errorInfo; //错误提示

int affectedRow; //上一次查询影响的行数

DBctrl(); //构造函数

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();

};

#endif

dbctrl.cpp

#include "dbctrl.h"

//构造函数 初始化各个变量和数据

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;

}

//编译时显示测试信息,正式使用时把此函数主题注释掉即可

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<

}

//收集错误信息

void DBctrl::DBerror()

{

errorNum=mysql_errno(&mydata);

errorInfo=mysql_error(&mydata);

}

//连接数据库

void DBctrl::DBconn(char* server, char* username, char* password, char* database,int port)

{

char* svr=server; //server:服务器域名或IP

char* usr=username; //username:数据库用户名

char* pwd=password; //password:数据库密码

char* dbn=database; //database:数据库名

int prt=port; //port:端口号

//这里新建变量并再赋一次值是为了调试的时候显示连接参数,其实可以不这么做

if(mysql_real_connect(&mydata,svr,usr,pwd,dbn,prt,0,0) != NULL)

DBtest(1);

else

DBtest(2);

}

//执行查询语句

void DBctrl::DBquery(string queryStr)

{

if(0==mysql_query(&mydata,queryStr.c_str()))

DBtest(3);

else

DBtest(4);

DBerror();

}

//执行查询语句(重载,有返回结果的)

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);//计算行数

field=mysql_num_fields(result);//计算列数

//转出数据

if(row>100 || field>100)

DBtest(5);

else

{

MYSQL_ROW line=NULL;

line=mysql_fetch_row(result);//取第一行结果

int j=0;

while(NULL!=line)//查看是否为空行,是则结束,否则将这一行的数据转存到data的一行中并取下一行

{

for(int i=0; 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]; //存放查询结果

query="Select * from table1";

my.DBconn("localhost","root","123456","test",3306);

my.DBquery(query,data); //执行query中的语句,并将结果回送给data

my.DBclose(); //关闭连接

/* 此处用for循环显示data数组的内容... */

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值