C++连接使用MySQL的方法

所属分类: 数据库 / Mysql 阅读数: 1752
收藏 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;
}

输出内容

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

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

MySQL中按照多字段排序及问题解决

这篇文章主要介绍了MySQL中按照多字段排序及问题解决的方法,非常的实用,有需要的小伙伴可以参考下。
收藏 0 赞 0 分享

MySQL外键使用详解

两天有人问mysql中如何加外键,今天抽时间总结一下。mysql中MyISAM和InnoDB存储引擎都支持外键(foreign key),但是MyISAM只能支持语法,却不能实际使用。
收藏 0 赞 0 分享

Mysql中LAST_INSERT_ID()的函数使用详解

从名字可以看出,LAST_INSERT_ID即为最后插入的ID值,有了这个实用的函数,我们可以实现很多问题,下面我们就来深入探讨下。
收藏 0 赞 0 分享

MySql insert插入操作的3个小技巧分享

这篇文章主要介绍了MySql insert插入操作的3个小技巧分享,本文讲解了插入的数据来源自其他表、插入时排除(忽略)重复记录、插入时遇到重复记录做更新操作三个小技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

mysql修改自增长主键int类型为char类型示例

这篇文章主要介绍了mysql修改自增长主键int类型为char类型示例,需要的朋友可以参考下
收藏 0 赞 0 分享

Windows下使用Cygwin编译MySQL客户端

这篇文章主要介绍了Windows下使用Cygwin编译MySQL客户端,本文详细的讲解了编译过程,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL数据库优化推荐的编译安装参数小结

这篇文章主要介绍了MySQL数据库优化推荐的编译安装参数小结,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL之Field‘***’doesn’t have a default value错误解决办法

这篇文章主要介绍了MySQL之Field‘***’doesn’t have a default value错误解决办法,需要的朋友可以参考下
收藏 0 赞 0 分享

php连接MySQL的两种方式对比

这篇文章主要介绍了php连接MySQL的两种方式对比,一种是原生的链接方式另外一种是PDO方式,附上示例,推荐给大家,有需要的小伙伴可以参考下
收藏 0 赞 0 分享

Mysql InnoDB删除数据后释放磁盘空间的方法

这篇文章主要介绍了Mysql InnoDB删除数据后释放磁盘空间的方法,Innodb数据库对于已经删除的数据只是标记为删除,并不真正释放所占用的磁盘空间,这就导致InnoDB数据库文件不断增长,本文就讲解释放磁盘空间的方法,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多