文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

c++中怎么实现一个mysql通用类

2024-04-02 19:55

关注

本篇文章给大家分享的是有关c++中怎么实现一个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 <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;                 //上一次查询影响的行数
		

		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<<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();           //关闭连接  
      
          
    }

以上就是c++中怎么实现一个mysql通用类,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯