#include "MysqlDB.h"
#include
#include
#include
#include
using namespace std;
MysqlDB::~MysqlDB()
{
if (&connector != NULL)
{
mysql_close(&connector);
m_bConnected = false;
}
}
MysqlDB::MysqlDB(string host, string user, string pwd, string dbname)
{
// 初始化和验证参数
m_bConnected = false;
this->setHost(host);
this->setUser(user);
this->setPwd(pwd);
this->setDbname(dbname);
}
void MysqlDB::setHost(string host)
{
if (host.empty())
{
cout << "没有指定主机地址,默认:localhost" << endl;
this->m_cpHost = new char[10];
strcpy_s(this->m_cpHost, 10, "localhost");
}
else {
this->m_cpHost = new char[strlen(host.c_str()) + 1];
strcpy_s(this->m_cpHost, strlen(host.c_str()) + 1, host.c_str());
}
}
void MysqlDB::setUser(string user)
{
if (user.empty())
{
cout << "没有指定数据库用户名,默认:root" << endl;
this->m_cpUser = new char[5];
strcpy_s(this->m_cpUser, 5, "root");
}
else {
this->m_cpUser = new char[strlen(user.c_str()) + 1];
strcpy_s(this->m_cpUser, strlen(user.c_str()) + 1, user.c_str());
}
}
void MysqlDB::setPwd(string pwd)
{
if (pwd.empty())
{
cout << "没有指定数据库密码,默认:123456" << endl;
this->m_cpPwd = new char[7];
strcpy_s(this->m_cpPwd, 7, "123456");
}
else {
this->m_cpPwd = new char[strlen(pwd.c_str()) + 1];
strcpy_s(this->m_cpPwd, strlen(pwd.c_str()) + 1, pwd.c_str());
}
}
void MysqlDB::setDbname(string dbname)
{
if (dbname.empty())
{
cout << "没有指定数据库名称,默认地址:mysql" << endl;
this->m_cpDbname = new char[6];
strcpy_s(this->m_cpDbname, 6, "mysql");
}
else {
this->m_cpDbname = new char[strlen(dbname.c_str()) + 1];
strcpy_s(this->m_cpDbname, strlen(dbname.c_str()) + 1, dbname.c_str());
}
}
int MysqlDB::initDB()
{
if (m_bConnected)
{
cout << "已经连接到数据库" << endl;
return 0;
}
// 初始化数据库连接变量
mysql_init(&connector);
// 访问数据库
if (!mysql_real_connect(&connector, m_cpHost, m_cpUser, m_cpPwd, m_cpDbname, 0, NULL, 0))
{
cout << "数据库连接失败: " << mysql_errno(&connector) << ", " << mysql_error(&connector) << endl;
return -1;
}
m_bConnected = true;
return 0;
}
int MysqlDB::query(string sql) {
if (!m_bConnected)
{
cout << "没有连接到数据库" << endl;
return -1;
}
if (sql.empty())
{
cout << "sql语句为空" << endl;
return -1;
}
mysql_query(&connector, "set names gbk");
int flag = mysql_real_query(&connector, sql.c_str(), (unsigned long)strlen(sql.c_str()));
if (flag < 0)
{
cout << "查询出错: " << mysql_errno(&connector) << ", " << mysql_error(&connector) << endl;
return -1;
}
res = mysql_store_result(&connector); // 将查询结果读取到内存中 如果数据很多的情况会比较耗内存
//res = mysql_use_result(&connector); // 需要用到的时候,每次从服务器中读取一行
vector objectValue;
while ((row = mysql_fetch_row(res)))
{
objectValue.clear();
for (size_t i = 0; i < mysql_num_fields(res); i++)
{
objectValue.push_back(row[i]);
}
this->m_vvQueryResult.push_back(objectValue);
}
// 释放结果集
mysql_free_result(res);
return 0;
}
int MysqlDB::insert(string sql)
{
if (!m_bConnected)
{
cout << "没有连接到数据库" << endl;
return -1;
}
if (sql.empty())
{
cout << "sql语句为空" << endl;
return -1;
}
int res = mysql_query(&connector, sql.c_str());
if (res < 0)
{
cout << "插入出错: " << mysql_errno(&connector) << ", " << mysql_error(&connector) << endl;
return -1;
}
int rows = mysql_affected_rows(&connector);
cout << "插入行:" << rows << " 成功" << endl;
return rows;
}
vector> MysqlDB::getQueryResult()
{
return this->m_vvQueryResult;
}main.cpp