windows下c++连接mysql
mysql自带的include目录下的文件 和 lib目录下的库文件。
·
一、开发环境
vs2019 debug/release x64
二、相关文件和库
mysql自带的include目录下的文件 和 lib目录下的库文件
include文件地址
lib文件地址
三、导入头文件和库文件
四、把lib目录下的libmysql.dll放到exe同目录下
五、代码
SimpleDb.h
#pragma once
#include<string>
#include<vector>
#include"include/mysql.h"
struct SField
{
std::string strValue;
bool bIsNull{ false };
enum_field_types eType { MYSQL_TYPE_NULL }; //字段类型
};
class CSimpleDb
{
public:
CSimpleDb( std::string strHost,int nPort,
std::string strUser,
std::string strPassWord,
std::string strDb);
~CSimpleDb();
bool Connected();
bool Query(std::string strSQL, std::vector<std::vector<SField>> &vecRes);
private:
MYSQL* m_pMysql{ nullptr };
std::string m_strHost;
std::string m_strUser;
std::string m_strPassWord;
std::string m_strDb;
int m_nPort;
};
SimpleDb.cpp
#include"SimpleDb.h"
#include<iostream>
CSimpleDb::CSimpleDb(
std::string strHost, int nPort,
std::string strUser,
std::string strPassWord,
std::string strDb
):m_strHost(strHost),m_strUser(strUser),m_strPassWord(strPassWord),m_strDb(strDb), m_nPort(nPort)
{
m_pMysql = mysql_init(nullptr);
//mysql_options(m_pMysql, MYSQL_SET_CHARSET_NAME,"gbk");
}
bool CSimpleDb::Connected()
{
//对于成功的连接,返回值与第一个参数的值相同
auto p = mysql_real_connect(m_pMysql, m_strHost.c_str(), m_strUser.c_str(), m_strPassWord.c_str(), m_strDb.c_str(), m_nPort
, nullptr, 0);
if (nullptr == p)
{
std::cout << mysql_error(m_pMysql) << std::endl;
return false;
}
return true;
}
bool CSimpleDb::Query(std::string strSQL, std::vector<std::vector<SField>>& vecRes)
{
vecRes.clear();
const int nRet = mysql_query(m_pMysql, strSQL.c_str());
do
{
if (0 != nRet)
break;
MYSQL_RES* res = mysql_store_result(m_pMysql);
if (nullptr == res && 0 == mysql_field_count(m_pMysql))
break;
const uint64_t n64Rows = mysql_num_rows(res);
const unsigned nFields = mysql_num_fields(res);
MYSQL_FIELD * arrFields = mysql_fetch_fields(res);
for (unsigned i = 0; i < nFields; i++)
{
std::cout << arrFields[i].name << "," << arrFields[i].type << "," << arrFields[i].length << "\t";
}
std::cout << std::endl;
vecRes.resize(n64Rows);
for (uint64_t i = 0; i < n64Rows; i++)
{
vecRes[i].resize(nFields);
auto& vecField = vecRes[i];
MYSQL_ROW row = mysql_fetch_row(res);
for (unsigned j = 0; j < nFields; j++)
{
auto &sField = vecField[j];
sField.bIsNull = nullptr == row[j];
sField.eType = arrFields[i].type;
if (nullptr != row[j])
sField.strValue += row[j];
else
sField.strValue = "null";
std::cout << sField.strValue << "\t";
}
std::cout << std::endl;
}
mysql_free_result(res);
return true;
} while (false);
const char* pError = mysql_error(m_pMysql);
if (nullptr != pError && strlen(pError) > 0)
{
std::cout << pError << std::endl;
return false;
}
return true;
}
CSimpleDb::~CSimpleDb()
{
if (nullptr != m_pMysql)
{
mysql_close(m_pMysql);
}
}
main.cpp
//
#include <iostream>
#include "SimpleDb.h"
int main()
{
CSimpleDb ss("IP",端口, "用户", "密码", "数据库");
bool bConnected = ss.Connected();
std::vector<std::vector<SField>> vecRes;
bool bSucc = ss.Query("SELECT * FROM db_test.single_table", vecRes);
std::string strSQL = "insert into db_test.single_table(key1,key2,key3,key_part1,key_part2,key_part3,commom_field)\
values('', '10', '8', '9', '5', '6', '90')";
bSucc = ss.Query(strSQL, vecRes);
return 0;
}

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)