C++连接使用MySQL的方法

所属分类: 数据库 / Mysql 阅读数: 1733
收藏 0 赞 0 分享

C++连接使用MySQL,供大家参考,具体内容如下

定义MySQLCon类

class MySQLCon
{
 MYSQL mysql;
public:
 int errornum;
 string errortext;
public:
 //初始化
 MySQLCon();
 //关闭数据库
 ~MySQLCon();
 //链接数据库
 bool OpenConn(const char* host,const char* username,const char* pwd,const char* dbName,unsigned port=0);
 void GetErrorText();//获取错误文本
 void Close();//关闭数据库
 bool ExecuteSQL(const char* sql);//使用SQL语句,无法接收数据
 bool QureySQL(const char* sql, vector<vector<string>>& resultSet);//使用SQL语句并接收数据(select语句)
};

初始化操作

MySQLCon::MySQLCon()
{
 if (mysql_library_init(0, nullptr, nullptr)) 
 {
 cout << "CAPI初始化失败" << std::endl;
 getchar();
 exit(1);
 }
 if (mysql_init(&mysql)==nullptr)
 {
 cout << "初始化数据库变量失败" << std::endl;
 getchar();
 exit(1);
 }
 if (mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk"))
 {
 cout << "设置连接选项失败" << std::endl;
 getchar();
 exit(1);
 }
}

连接到MySQL服务器

//参数分别为主机,用户名,密码,数据库名,端口号
bool MySQLCon::OpenConn(const char* host, const char* username, const char* pwd, const char* dbName, unsigned port)
{
 //连接数据库
 if (mysql_real_connect(&mysql, host, username, pwd, dbName, port, nullptr, 0)==nullptr)
 {
 cout << "连接到MySQL服务器失败" << std::endl;
 //获取错误文本
 GetErrorText();
 exit(1);
 return false;
 }
 return true;
 
}

获取MySQL错误信息

void MySQLCon::GetErrorText()
{
 //获取错误代码
 errornum = mysql_errno(&mysql);
 //获取错误文本
 errortext = mysql_error(&mysql);
 //打印错误代码
 cout << "error num: " << errornum << std::endl;
 //打印错误文本
 cout << "error text: " << errortext << std::endl;
 getchar();
}

C++中使用SQL语句

bool MySQLCon::ExecuteSQL(const char* sql)
{
 //使用SQL语句但无法接收数据
 if (mysql_real_query(&mysql, sql, strlen(sql)))
 {
 GetErrorText();
 return false;
 }
 return true;
}
bool MySQLCon::QureySQL(const char* sql, vector<vector<string>>& resultSet)
{
 //使用SQL语句并接收数据至vector容器
 if (mysql_real_query(&mysql, sql, strlen(sql)))
 {
 GetErrorText();
 return false;
 }
 //创建一个MYSQL结果集
 MYSQL_RES* result = mysql_store_result(&mysql);
 //获取行和列的总数
 unsigned int rows = mysql_num_rows(result);
 unsigned int cols = mysql_num_fields(result);
 //用于记录结果集中的一条数据
 MYSQL_ROW row;
 while (row = mysql_fetch_row(result))
 {
 //创建一个vector容器用于储存row中的数据
 vector<string> lineDate;
 for (int i = 0; i < cols; i++)
 {
 if (row[i])
 {
 //将row中每一列的数据存入lineDate中
 lineDate.push_back(row[i]);
 }
 else
 {
 lineDate.push_back("");
 }
 }
 //在resultSet中存入整行数据
 resultSet.push_back(lineDate);
 }
 //释放结果集
 mysql_free_result(result);
 return true;
}

关闭数据库

void MySQLCon::Close()
{
 mysql_close(&mysql);
}
MySQLCon::~MySQLCon()
{
 Close();
 mysql_library_end();
}

示例主函数

int main()
{
 MySQLCon c_apiconn;
 c_apiconn.OpenConn("127.0.0.1", "root", "136119", "fancy");
 string sql = "use fancy;";
 vector<vector<string>> data;
 c_apiconn.ExecuteSQL(sql.c_str());
 sql = "select * from fancy.info;";
 c_apiconn.QureySQL(sql.c_str(), data);
 for (int i = 0; i < data.size(); i++)
 {
 for (int j = 0; j < data[i].size(); j++)
 {
 cout << data[i][j] << "\t";
 }
 cout << endl;
 }
 return 0;
}

输出内容

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Mac 将mysql路径加入环境变量的方法

这篇文章主要介绍了Mac如何将mysql路径加入环境变量,有需要的朋友好按照下面的步骤操作即可
收藏 0 赞 0 分享

mysql 增加修改字段类型及删除字段类型

本节主要介绍了mysql如何增加修改字段类型及删除字段类型,需要的朋友可以参考下
收藏 0 赞 0 分享

Mysql主从复制(master-slave)实际操作案例

这篇文章主要介绍了Mysql主从复制(master-slave)实际操作案例,同时介绍了Mysql grant 用户授权的相关内容,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL异常处理浅析

这篇文章主要介绍了MySQL的异常处理,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL存储毫秒数据的方法

MySQL中没有可以直接存储毫秒数据的数据类型,但是不过MySQL却能识别时间中的毫秒部分。这篇文章主要介绍了MySQL存储毫秒数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

MySql中使用INSERT INTO语句更新多条数据的例子

这篇文章主要介绍了MySql中使用INSERT INTO语句更新多条数据的例子,MySQL的特有语法,需要的朋友可以参考下
收藏 0 赞 0 分享

Windows下MySql错误代码1045的解决方法

这篇文章主要介绍了Windows下MySql错误代码1045的解决方法,文中还包含了2个Linux下的解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句

这篇文章主要介绍了mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句,一般在一些统计报表中比较常用这个时间段,需要的朋友可以参考下
收藏 0 赞 0 分享

mysql的中文数据按拼音排序的2个方法

这篇文章主要介绍了mysql的中文数据按拼音排序的2个方法,用于一些特殊环境,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL定期分析检查与优化表的方法小结

听DBA的人说,相比oracle,MySQL就是一个玩具级别的数据库,在网易门户中,DBA基本很少去管理到MySQL的东西,所以我们产品使用到的MySQL的一些配置和优化还是需要我们开发人员自己动手,下面就简单介绍一下实用的定期优化方法
收藏 0 赞 0 分享
查看更多