首页前端开发HTMLMySQL数据库————数据库与vs的连接(二)

MySQL数据库————数据库与vs的连接(二)

时间2023-07-09 10:01:01发布访客分类HTML浏览372
导读:二、数据库与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
【数据库】NoSQL数据库 MySQL数据库————初识数据库(一)

游客 回复需填写必要信息