Files
energy_storage/src/database/MysqlClient.cpp

123 lines
2.2 KiB
C++
Raw Normal View History

2025-05-19 09:54:33 +08:00
#include "MysqlClient.h"
#include "common/Utils.h"
//#include "Spdlogger.h"
#include "Logger.h"
MysqlClient::MysqlClient(MysqlOption option) : option_(option)
2025-05-19 09:54:33 +08:00
{
conn();
}
MysqlClient::~MysqlClient()
{
this->close();
}
int MysqlClient::conn()
{
if (mysql_)
{
return 0;
}
mysql_ = mysql_init(nullptr);
MYSQL* ret = mysql_real_connect(mysql_, option_.host.c_str(), option_.user.c_str(), option_.password.c_str(), option_.dbname.c_str(), option_.port, NULL, 0);
2025-05-19 09:54:33 +08:00
if (ret == NULL)
{
std::string err = mysql_error(mysql_);
2025-05-19 09:54:33 +08:00
//Spdlogger::info("[mysql] connect failed: {}", mysql_error(mysql_));
mysql_ = nullptr;
}
else
{
mysql_query(mysql_, "set names 'utf8';");
}
return 0;
}
bool MysqlClient::isConnected()
{
return (mysql_ != nullptr);
}
void MysqlClient::close()
{
if (mysql_)
{
mysql_close(mysql_);
mysql_ = nullptr;
}
}
bool MysqlClient::exec(std::string sql)
{
//XLOGD() << "Mysql exec sql=" << sql;
2025-05-19 09:54:33 +08:00
if (!mysql_)
{
XLOGE() << "Mysql exec error, database is not connected.";
return false;
}
int ret = mysql_query(mysql_, sql.c_str());
if (0 != ret)
{
XLOGE() << "Mysql exec error: " << mysql_error(mysql_) << ", sql=" << sql;
return false;
}
return true;
}
bool MysqlClient::exec(std::string sql, vector<DataFields>& result)
{
result.clear();
if (!mysql_)
{
return false;
}
int ret = mysql_query(mysql_, sql.c_str());
if (0 != ret)
{
//Spdlogger::error("[mysql] mysql_query failed!! error ret={:d}, sql={}", ret, sql);
XLOGE() << "mysql error: " << sql;
return false;
}
else
{
//Spdlogger::info("[mysql] query success. sql={}", sql);
}
MYSQL_RES* res = mysql_store_result(mysql_);
if (!res)
{
return false;
}
vector<string> field_names;
while (true)
{
MYSQL_FIELD* field = mysql_fetch_field(res);
if (!field)
{
break;
}
field_names.push_back(field->name);
}
while (true)
{
MYSQL_ROW row = mysql_fetch_row(res);
if (!row)
{
break;
}
DataFields row_data;
for (size_t i = 0; i < field_names.size(); ++i)
{
string field_text = (row[i] == NULL) ? "" : row[i];
row_data.set(field_names[i], field_text);
}
result.push_back(row_data);
}
// 释放结果集
mysql_free_result(res);
return true;
}