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
