VS2022配置C++ connector连接mysql(保姆级教学)
咩咩大主教 2024-06-11 14:35:03 阅读 83
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[0], row[1]); } 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++
需要注意的是,MYSQL官方提供了两种版本的C++ Connector,第一种是Release版本的也就是我画了红圈的部分,第二种是Debug版本的(黄圈部分),两种版本的区别如下,我们下载红圈中的第二个Release,也就是Archive。
Release 版本
优化编译,去除了调试信息。编译时开启了各种优化选项,以获得更好的性能。适用于生产环境部署,不包含额外的调试信息,体积较小。
Debug 版本
包含调试信息,可用于在开发过程中进行调试。可能启用了更多的断言和检查,以帮助捕获潜在的问题。可能会牺牲一些性能以换取更多的调试信息和运行时检查。
下载好后将压缩包解压到你想放置的目录下(最好和博主一样,放置在MySQL默认的连接库目录下,以后方便统一管理)
打开VS2022创建一个空的项目
创建一个CPP文件
第一步 将VS2022的模式改为Release模式
第二步 向项目中添加C++ Connector的头文件(include)
右击项目名称,打开属性
在C/C++的常规选项中找到附加包含目录
添加刚刚解压好的Release版本的C++ connector的include目录
点击应用
第三步 向项目中添加C++ Connector的库文件(lib)
找到链接器->常规->附加库目录
添加刚刚解压好的Release版本的C++ connector的vs14目录
点击应用
第四步 附加C++ Connector的依赖项
找到链接器->输入->附加依赖项
添加mysqlcppconn.lib和mysqlcppconn8.lib并点击应用
将lib64目录下的四个dll文件复制到项目文件夹的Release目录下(注意这个Release目录下必须有你的项目.exe文件,比如我的项目名称为test3,所以有test3.exe,不要找错Release目录了)
第五步 运行代码
#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就会直接报错了。
在控制台输入mysql -u 你的用户名 -p,输入你的密码,启动mysql,再输入show databases,发现成功创建了数据库testmysql,至此VS2022配置C++ Connector连接MySQL圆满结束。
上一篇: Python灰帽——Scapy模块 / 数据包的构造、发送、接收、捕获
下一篇: 已解决java.net.NoRouteToHostException: 无法到达主机异常的正确解决方法,亲测有效!!!
本文标签
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。