泉缘泉 发表于 2024-6-21 13:22:58

VS2022配置C++ connector连接mysql(保姆级讲授)

C++连接MySQL数据库的方法介绍

C++连接数据库mysql一般来说有三种方式,一种是通过传统的C Connector,一种是用基于JDBC的充满面向对象思绪的C++ Connector,还有一种则是通过ODBC。
C Connector这种各人应该都比较熟悉,很多C++的mysql入门视频都是使用这种方式连接mysql的,这种方式提供了底层的数据库操纵接口,更接近数据库的原生操纵,相比较高级接口,更自由地控制数据库的细节和流程,可能在执行速度和内存管理方面更高效一些,但是对于面向对象编程来说其实不算友好。
#include <stdio.h>
#include <mysql/mysql.h>

int main() {
    MYSQL *conn;
    MYSQL_RES *res;
    MYSQL_ROW row;

    conn = mysql_init(NULL);

    if (conn == NULL) {
      fprintf(stderr, "mysql_init failed\n");
      return 1;
    }

    if (mysql_real_connect(conn, "localhost", "username", "password", "database_name", 0, NULL, 0) == NULL) {
      fprintf(stderr, "mysql_real_connect failed: %s\n", mysql_error(conn));
      mysql_close(conn);
      return 1;
    }

    if (mysql_query(conn, "SELECT * FROM table_name")) {
      fprintf(stderr, "mysql_query failed: %s\n", mysql_error(conn));
      mysql_close(conn);
      return 1;
    }

    res = mysql_store_result(conn);

    while ((row = mysql_fetch_row(res)) != NULL) {
      printf("%s %s\n", row, row);
    }

    mysql_free_result(res);
    mysql_close(conn);

    return 0;
}
C++ Connector提供了面向对象的接口和功能,使得编程更加方便,对数据库操纵举行了封装,提供更高级别的接口和抽象,简化了开辟职员与数据库交互的复杂性,简朴来说就是这种方式更加人性化,更轻易明白,如果你有JDBC的基础,那么上手C++ Connector基本是小菜一碟,由于C++ Connector就是基于JDBC开辟的,这篇博客也主要讨论这种方式在VS2022上连接MYSQL(本次博客默认你已经安装好了MYSQL8.0)。
#include <jdbc/cppconn/statement.h>
#include <jdbc/cppconn/resultset.h>
#include <jdbc/cppconn/exception.h>
#include "jdbc/mysql_driver.h"
#include<windows.h>
int main() {
    SetConsoleOutputCP(CP_UTF8);//设置编码格式,避免mysql中的中文数据乱码
try
{
      // 注册MySQL驱动程序
      sql::mysql::MySQL_Driver* driver = sql::mysql::get_mysql_driver_instance();
      sql::Connection* con = driver->connect("tcp://localhost:3306", "root", "####");
      sql::Statement* stmt = con->createStatement();
      //获取management数据库里面的user表里面的每一个user对应的值
      sql::ResultSet* res = stmt->executeQuery("SELECT * FROM management.user");
      while (res->next())
      {
      //打印user的name属性的值
          std::cout << res->getString("name") << std::endl;
      }
      delete res;
      delete stmt;
      delete con;
}
    catch(sql::SQLException &sqle)
    {
       std::cout<<"error"<<std::endl;
    }
    return 0;
}
基本预备

首先来到MYSQL官网下载C++ Connector库MySQL :: Download Connector/C++
https://img-blog.csdnimg.cn/direct/b18549992f954a598a1cf7507dd00422.png
须要留意的是,MYSQL官方提供了两种版本的C++ Connector,第一种是Release版本的也就是我画了红圈的部门,第二种是Debug版本的(黄圈部门),两种版本的区别如下,我们下载红圈中的第二个Release,也就是Archive。
Release 版本


[*]优化编译,去除了调试信息。
[*]编译时开启了各种优化选项,以得到更好的性能。
[*]适用于生产情况摆设,不包含额外的调试信息,体积较小。
Debug 版本


[*]包含调试信息,可用于在开辟过程中举行调试。
[*]可能启用了更多的断言和查抄,以资助捕获潜在的问题。
[*]可能会捐躯一些性能以变动更多的调试信息和运行时查抄。
 下载好后将压缩包解压到你想放置的目录下(最好和博主一样,放置在MySQL默认的连接库目录下,以后方便同一管理)
https://img-blog.csdnimg.cn/direct/03b16d08cfa94654b3056b23f6b444f1.png
打开VS2022创建一个空的项目 https://img-blog.csdnimg.cn/direct/c722fb5d3c3e43c2af50e976cc16822e.png
创建一个CPP文件
https://img-blog.csdnimg.cn/direct/516a00dd8a724e489d1b5533afd85dcc.png
第一步 将VS2022的模式改为Release模式

https://img-blog.csdnimg.cn/direct/0d57974990f641e097600ea9a835b8fd.png
第二步 向项目中添加C++ Connector的头文件(include)

右击项目名称,打开属性
https://img-blog.csdnimg.cn/direct/81ab2eb780cb42e2bf65d71e764a0e67.png
在C/C++的常规选项中找到附加包含目录
https://img-blog.csdnimg.cn/direct/e6363f5fccc94481a27c126aa0ce8ab1.png
添加刚刚解压好的Release版本的C++ connector的include目录
https://img-blog.csdnimg.cn/direct/8e4787c6c2d54ab48d6fbed106466283.png
点击应用
https://img-blog.csdnimg.cn/direct/88bfbd7c2b4f4256b8e5f48890a9c261.png 第三步 向项目中添加C++ Connector的库文件(lib)

找到链接器->常规->附加库目录
https://img-blog.csdnimg.cn/direct/6464572e73f84b68896d76914ab13429.png
添加刚刚解压好的Release版本的C++ connector的vs14目录
https://img-blog.csdnimg.cn/direct/ececc616fac24b6a8e138b14cbdaaafe.png
点击应用
https://img-blog.csdnimg.cn/direct/204e53f391424973bc619eba39107f25.png
第四步 附加C++ Connector的依赖项

找到链接器->输入->附加依赖项
https://img-blog.csdnimg.cn/direct/9687a6513c9045c283d74fbb9c85e820.png
添加mysqlcppconn.lib和mysqlcppconn8.lib并点击应用
https://img-blog.csdnimg.cn/direct/414e93e3e856493fbd31d4f71708b053.png
将lib64目录下的四个dll文件复制到项目文件夹的Release目录下(留意这个Release目录下必须有你的项目.exe文件,比如我的项目名称为test3,所以有test3.exe,不要找错Release目录了)
https://img-blog.csdnimg.cn/direct/c80c3d123c2f4a2fb7200ba5f5aafbd4.png
https://img-blog.csdnimg.cn/direct/59d269c55f704411a39e75a308fc05e6.png
第五步 运行代码 

#include <jdbc/cppconn/statement.h>
#include <jdbc/cppconn/resultset.h>
#include <jdbc/cppconn/exception.h>
#include "jdbc/mysql_driver.h"
#include<windows.h>
int main() {
    std::string sql1 = "create database testmysql";//sql1用于创建testmysql数据库
    SetConsoleOutputCP(CP_UTF8);
    try
    {
      // 注册MySQL驱动程序
      sql::mysql::MySQL_Driver* driver = sql::mysql::get_mysql_driver_instance();
      sql::Connection* con;
      sql::Statement* stmt;
      sql::ResultSet* res;
      //获取数据库连接对象
      con = driver->connect("tcp://localhost:3306", "root", "2145");
      //获取执行语句对象
      stmt = con->createStatement();
      stmt->execute(sql1);
      delete stmt;
      delete con;
    }
    catch (sql::SQLException& sqle)
    {
      std::cout << "数据库连接出错啦,你是不是密码或者用户名写错了?或者你的数据库名称或者表名称写错了?"<<std::endl;
    }
    return 0;
}
成功运行,切记一旦成功运行了,就不要再运行第二遍,不然会报错,由于第一遍成功运行后已经创建了testmysql数据库,再一次运行去创建testmysql就会直接报错了。
https://img-blog.csdnimg.cn/direct/1fcc3412cf9c4fc7b20bdde2ea983404.png
在控制台输入mysql -u 你的用户名 -p,输入你的暗码,启动mysql,再输入show databases,发现成功创建了数据库testmysql,至此VS2022配置C++ Connector连接MySQL圆满结束。
 https://img-blog.csdnimg.cn/direct/0a1109f81b7b400d87a5ab974f30be56.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: VS2022配置C++ connector连接mysql(保姆级讲授)