现在的位置: 首页 > 综合 > 正文

源码分享:输出到mysql包装

2013年07月17日 ⁄ 综合 ⁄ 共 2169字 ⁄ 字号 评论关闭

mysql输出接口,包扩重连接

Output_mysql.h

// Output_mysql.h: interface for the Output_mysql class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_OUTPUT_MYSQL_H__5492A513_A87A_46B9_B8A5_2209B57E2E82__INCLUDED_)
#define AFX_OUTPUT_MYSQL_H__5492A513_A87A_46B9_B8A5_2209B57E2E82__INCLUDED_

#include "Log.h"
#include "mysql.h"  


// mysql输出
class Output_mysql
{
public:
	// @brief 数据库插入
	bool insert(char* buf);

	// @brief 初始化
	bool init();

	Output_mysql();

	virtual ~Output_mysql();

private:

	//mysql连接
	MYSQL _mysql;  
};

#endif // !defined(AFX_OUTPUT_MYSQL_H__5492A513_A87A_46B9_B8A5_2209B57E2E82__INCLUDED_)

Output_mysql.cpp

// Output_mysql.cpp: implementation of the Output_mysql class.
//
//////////////////////////////////////////////////////////////////////

#include "Output_mysql.h"
#include "Log.h"
#include "Main_config.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Output_mysql::Output_mysql()
{
}

Output_mysql::~Output_mysql()
{
	mysql_close(&_mysql);
}

bool Output_mysql::init()
{
	bool ret = true;

	std::string ipAddress;  
    std::string username;  
	std::string passwd;  
	std::string database;  

	//读取数据库配置
	ipAddress = Main_config::instance().get_config().Read("MYSQL_IP", ipAddress); 
	username = Main_config::instance().get_config().Read("MYSQL_USER", username); 
	passwd = Main_config::instance().get_config().Read("MYSQL_PASSWD", passwd); 
	database = Main_config::instance().get_config().Read("MYSQL_DATABASE", database); 
	
	//mysql 初始化
	if(!mysql_init(&_mysql))
	{
		FATAL("mysql_init failed");
		return false;
	}

	//mysql设置重新连接
	char reconnect = 1;
	if(mysql_options(&_mysql, MYSQL_OPT_RECONNECT, &reconnect) != 0)
	{
		FATAL("MYSQL_OPTION ERROR");
		return false;
	}	

	//mysql 连接
	if(!mysql_real_connect(&_mysql, ipAddress.c_str(), username.c_str(), passwd.c_str(), database.c_str(), 0, NULL, 0))
	{
		FATAL("mysql_real_connect failed");
		return false;
	}

	return ret;
}

bool Output_mysql::insert(char* buf)
{
	bool ret = true;
	
	char db_cmd[DB_CMD_LEN];
	snprintf(db_cmd, DB_CMD_LEN, "%s", buf); 

	if(mysql_ping(&_mysql) != 0)
	{
		NOTICE("reconnect mysql");
	}
	
	int ret_val = mysql_real_query(&_mysql, db_cmd, (unsigned int)strlen(db_cmd));
	if(ret_val)
	{
		WARNING("insert failed: " << ret_val);
	}
	else
	{
		NOTICE("insert success: " << db_cmd);
	}
	
	return ret;
}

抱歉!评论已关闭.