C++封装MySQL API
什么时候调用释放结果集
- 析构函数
- 可能会对数据库进行多次查询,每次查询一次都会得到结果集,查询是清空掉上次的结果集
源代码
MySQLConnect.h
#pragma once
#ifndef MYSQLCONNECT_H
#define MYSQLCONNECT_H
#include <iostream>
#include <mysql.h>
using namespace std;
class MySqlConnect
{
private:
void freeResult();
MYSQL* m_conn = nullptr;
MYSQL_RES* m_result = nullptr;
MYSQL_ROW m_row = nullptr;
public:
MySqlConnect();
~MySqlConnect();
bool connect(string user, string passwd,string dbName,string ip,unsigned short port = 3306 );
bool update(string sql);
bool query(string sql);
bool next();
string value(int index);
bool transaction();
bool commit();
bool rollback();
};
#endif
MySQLConnect.cpp
#include "MySQLConnect.h"
void MySqlConnect::freeResult()
{
if (m_result)
{
mysql_free_result(m_result);
m_result = nullptr;
}
}
MySqlConnect::MySqlConnect()
{
m_conn = mysql_init(nullptr);
mysql_set_character_set(m_conn, "utf8");
}
MySqlConnect::~MySqlConnect()
{
if (m_conn != nullptr)
{
mysql_close(m_conn);
}
freeResult();
}
bool MySqlConnect::connect(string user, string passwd, string dbName, string ip, unsigned short port)
{
MYSQL* ptr = mysql_real_connect(m_conn, ip.c_str(), user.c_str(), passwd.c_str(), dbName.c_str(), port, nullptr, 0);
return ptr!=nullptr;
}
bool MySqlConnect::update(string sql)
{
if (mysql_query(m_conn, sql.c_str()))
{
return false;
};
return true;
}
bool
MySqlConnect::query(string sql)
{
freeResult();
if (mysql_query(m_conn, sql.c_str()))
{
return false;
};
m_result = mysql_store_result(m_conn);
return true;
}
bool MySqlConnect::next()
{
if (m_result != nullptr)
{
m_row = mysql_fetch_row(m_result);
return true;
}
return false;
}
string MySqlConnect::value(int index)
{
int row_num = mysql_num_fields(m_result);
if (index >= row_num || index < 0)
{
return string();
}
char* val = m_row[index];
unsigned long length = mysql_fetch_lengths(m_result)[index];
return string(val,length);
}
bool MySqlConnect::transaction()
{
return mysql_autocommit(m_conn,false);
}
bool MySqlConnect::commit()
{
return mysql_commit(m_conn);
}
bool MySqlConnect::rollback()
{
return mysql_rollback(m_conn);
}
瓶子的跋涉博客