共计 3076 个字符,预计需要花费 8 分钟才能阅读完成。
本篇文章给大家分享的是有关 c ++ 中怎么实现一个 mysql 通用类,丸趣 TV 小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着丸趣 TV 小编一起来看看吧。
常用的函数
初始化 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 string
#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; // 上一次查询影响的行数
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 message endl;
// 收集错误信息
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 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]; // 存放查询结果
query= Select * from table1
my.DBconn(localhost , root , 123456 , test ,3306);
my.DBquery(query,data); // 执行 query 中的语句,并将结果回送给 data
my.DBclose(); // 关闭连接
/* 此处用 for 循环显示 data 数组的内容... */
}
以上就是 c ++ 中怎么实现一个 mysql 通用类,丸趣 TV 小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注丸趣 TV 行业资讯频道。
正文完