MySQL数据库————数据库与vs的连接(二)
导读:二、数据库与vs连接的步骤1、调用mysql_library_init( 初始化MySQL C API库2、调用mysql_init( 获取或初始化MYSQL结构3、调用mysql_options( 连接前设置选项4、调用mysql_...
二、数据库与vs连接的步骤
1、调用mysql_library_init() 初始化MySQL C API库
2、调用mysql_init() 获取或初始化MYSQL结构
3、调用mysql_options() 连接前设置选项
4、调用mysql_real_connect() 连接到MySQL服务器
5、调用mysql_real_query() 执行指定长度的SQL语句(嵌入式SQL)
6、调用mysql_close() 关闭与服务器的连接
7、调用mysql_library_end() 终止MySQL C API库
三、代码实现
1.初始化MySQL C API数据库 MySQLCAPI::MySQLCAPI() { //1、调用mysql_library_init() 初始化MySQL C API库 if (mysql_library_init(0, nullptr, nullptr)) { //如果初始化MySQL C API库失败则返回非0值,否则成功返回0 cout "初始化MySQL C API库失败!" endl; getchar(); exit(1); //退出程序 } //2、调用mysql_init() 获取或初始化MYSQL结构 if (mysql_init(& mysql) == nullptr) { //如果获取或初始化MYSQL结构失败则返回null cout "获取或初始化MYSQL结构失败!" endl; getchar(); exit(1); //退出程序 } //3、调用mysql_options() 连接前设置选项 if (mysql_options(& mysql, MYSQL_SET_CHARSET_NAME, "gbk")) { //连接前设置选项,并设置字符集为"gbk" cout "连接前设置选项失败!" endl; getchar(); exit(1); //退出程序 } }
2.数据库连接函数
bool MySQLCAPI::OpenConnect(const char* host, const char* username, const char* pwd, const char* db_name, unsigned port) { //4、调用mysql_real_connect() 连接到MySQL服务器 if (mysql_real_connect(& mysql, host, username, pwd, db_name, port, nullptr, 0) == nullptr) { cout "连接到MySQL服务器失败!" endl; //getchar(); //exit(1); //退出程序 GetErrorinfo(); //获取错误信息函数 return false; } return true; }
3.执行SQl操作
bool MySQLCAPI::ExecuteSQL(const char* sql) { //5、调用mysql_real_query() 执行指定长度的SQL语句(嵌入式SQL) if (mysql_real_query(& mysql, sql, strlen(sql))) { GetErrorinfo(); return false; } return true; }
4.执行SQL查询
//执行SQL查询(有结果集返回) bool MySQLCAPI::QuerySQL(const char* sql, vectorvectorstring> > & resultSet) { //① 执行SQL语句 //5、调用mysql_real_query() 执行指定长度的SQL语句(嵌入式SQL) if (mysql_real_query(& mysql, sql, strlen(sql))) { GetErrorinfo(); return false; } //② 接收查询结果集 MYSQL_RES* result = mysql_store_result(& mysql); //定义一个数据库结果集对象来获取查询结果集 //③ 把结果集对象result中的数据放入vector中 unsigned rows = (unsigned)mysql_num_rows(result); //获取结果集对象的行数,也就是记录(元组)的条数 unsigned fields = (unsigned)mysql_num_fields(result); //获取结果集对象的列数,也就是属性(字段)的个数 MYSQL_ROW row; //定义一个数据库行对象 while (row = mysql_fetch_row(result)) { //循环变量结果集中的每一行 vectorstring> linedata; //定义一个行数组 for (unsigned i = 0; i fields; i++) { if (row[i]) { linedata.push_back(row[i]); //数据不为空时,把数据放入临时数组中 } else { linedata.push_back(""); //数据为空时,把空字符串放入临时数组中 } } resultSet.push_back(linedata); //把结果集中的每一行数据放入resultSet中 } mysql_free_result(result); //释放临时结果集 return true; }
5.关闭数据库连接
MySQLCAPI::~MySQLCAPI() { //6、调用mysql_close() 关闭与服务器的连接 mysql_close(& mysql); //7、调用mysql_library_end() 终止MySQL C API库 mysql_library_end(); }
四.源代码呈现
1.类(头文件)
#pragma once #include "mysql.h" //包含MySQL数据库功能函数头文件 #pragma comment(lib,"libmysql.lib") //包含MySQL连接静态库 #include string> using std::string; #include vector> using std::vector; //1、调用mysql_library_init() 初始化MySQL C API库 //2、调用mysql_init() 获取或初始化MYSQL结构 //3、调用mysql_options() 连接前设置选项 //4、调用mysql_real_connect() 连接到MySQL服务器 //5、调用mysql_real_query() 执行指定长度的SQL语句(嵌入式SQL) //6、调用mysql_close() 关闭与服务器的连接 //7、调用mysql_library_end() 终止MySQL C API库 class MySQLCAPI { MYSQL mysql; //mysql连接变量:用于连接mysql数据库 public: MySQLCAPI(); ~MySQLCAPI(); int errornum; //错误码 string errorinfo; //错误提示信息 //数据库连接函数 bool OpenConnect(const char* host, const char* username, const char* pwd, const char* db_name, unsigned port = 0); //获取错误信息函数 void GetErrorinfo(); //执行SQL操作(没有结果集返回) bool ExecuteSQL(const char* sql); //执行SQL查询(有结果集返回) bool QuerySQL(const char* sql, vectorvectorstring> > & resultSet); } ;
2.类(cpp文件实现头文件功能)
#define _CRT_SECURE_NO_WARNINGS 1 #include "MySQLCAPI.h" #include iostream> #include string> using namespace std; MySQLCAPI::MySQLCAPI() { //1、调用mysql_library_init() 初始化MySQL C API库 if (mysql_library_init(0, nullptr, nullptr)) { //如果初始化MySQL C API库失败则返回非0值,否则成功返回0 cout "初始化MySQL C API库失败!" endl; getchar(); exit(1); //退出程序 } //2、调用mysql_init() 获取或初始化MYSQL结构 if (mysql_init(& mysql) == nullptr) { //如果获取或初始化MYSQL结构失败则返回null cout "获取或初始化MYSQL结构失败!" endl; getchar(); exit(1); //退出程序 } //3、调用mysql_options() 连接前设置选项 if (mysql_options(& mysql, MYSQL_SET_CHARSET_NAME, "gbk")) { //连接前设置选项,并设置字符集为"gbk" cout "连接前设置选项失败!" endl; getchar(); exit(1); //退出程序 } } MySQLCAPI::~MySQLCAPI() { //6、调用mysql_close() 关闭与服务器的连接 mysql_close(& mysql); //7、调用mysql_library_end() 终止MySQL C API库 mysql_library_end(); } //数据库连接函数 bool MySQLCAPI::OpenConnect(const char* host, const char* username, const char* pwd, const char* db_name, unsigned port) { //4、调用mysql_real_connect() 连接到MySQL服务器 if (mysql_real_connect(& mysql, host, username, pwd, db_name, port, nullptr, 0) == nullptr) { cout "连接到MySQL服务器失败!" endl; //getchar(); //exit(1); //退出程序 GetErrorinfo(); //获取错误信息函数 return false; } return true; } //获取错误信息函数 void MySQLCAPI::GetErrorinfo() { errornum = mysql_errno(& mysql); //获取错误码 errorinfo = mysql_error(& mysql); //获取错误提示信息 cout "\nerror num:" errornum "\nerror info:" errorinfo endl; getchar(); } //执行SQL操作(没有结果集返回) bool MySQLCAPI::ExecuteSQL(const char* sql) { //5、调用mysql_real_query() 执行指定长度的SQL语句(嵌入式SQL) if (mysql_real_query(& mysql, sql, strlen(sql))) { GetErrorinfo(); return false; } return true; } //执行SQL查询(有结果集返回) bool MySQLCAPI::QuerySQL(const char* sql, vectorvectorstring> > & resultSet) { //① 执行SQL语句 //5、调用mysql_real_query() 执行指定长度的SQL语句(嵌入式SQL) if (mysql_real_query(& mysql, sql, strlen(sql))) { GetErrorinfo(); return false; } //② 接收查询结果集 MYSQL_RES* result = mysql_store_result(& mysql); //定义一个数据库结果集对象来获取查询结果集 //③ 把结果集对象result中的数据放入vector中 unsigned rows = (unsigned)mysql_num_rows(result); //获取结果集对象的行数,也就是记录(元组)的条数 unsigned fields = (unsigned)mysql_num_fields(result); //获取结果集对象的列数,也就是属性(字段)的个数 MYSQL_ROW row; //定义一个数据库行对象 while (row = mysql_fetch_row(result)) { //循环变量结果集中的每一行 vectorstring> linedata; //定义一个行数组 for (unsigned i = 0; i fields; i++) { if (row[i]) { linedata.push_back(row[i]); //数据不为空时,把数据放入临时数组中 } else { linedata.push_back(""); //数据为空时,把空字符串放入临时数组中 } } resultSet.push_back(linedata); //把结果集中的每一行数据放入resultSet中 } mysql_free_result(result); //释放临时结果集 return true; }
3.源程序文件
#include iostream> #include string> using namespace std; #include "MySQLCAPI.h" void MySQLConnectTest(); int main() { MySQLConnectTest(); system("pause"); return 0; } void MySQLConnectTest() { MySQLCAPI MySQL_Connect; MySQL_Connect.OpenConnect("localhost", "root", "123456", "db_2"); string sql = "use db_2; "; vectorvectorstring> > data; MySQL_Connect.ExecuteSQL(sql.c_str()); //sql = "insert into db_2.student values(null,\"����\",103,'��',24); "; //MySQL_Connect.ExecuteSQL(sql.c_str()); sql = "select * from db_2.student; "; MySQL_Connect.QuerySQL(sql.c_str(), data); for (unsigned i = 0; i data.size(); i++) { for (unsigned j = 0; j data[i].size(); j++) { cout data[i][j] '\t'; } cout endl; } }
总结
数据库与VS的连接类容就到此结束了,我们的数据库知识点也讲解的差不多了,后面就是MySQL数据库的题目讲解了。也会持续更新win32和mfc。如果有需要,可以关注博主一下哦。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: MySQL数据库————数据库与vs的连接(二)
本文地址: https://pptw.com/jishu/298124.html