这里写目录标题
- VS项目环境配置
-
- [配置mysql Connect库](#配置mysql Connect库)
- 配置boost库
- [拷贝mysql Connect相关的动态库到当前程序可执行文件目录内](#拷贝mysql Connect相关的动态库到当前程序可执行文件目录内)
- 代码
- 一级目录
- 一级目录
- 一级目录
VS项目环境配置
配置mysql Connect库
1、debug改为release

2、右击项目,选择"属性"

3、安装完mysql的电脑,C盘以下路径会有以下文件:

4、添加"库的头文件目录"


将上图路径,填入上面的"附加包含目录"
5、添加"库目录"


将上图路径,填入上面的"附加库目录"
添加程序的"依赖项":


填入上图两个文件的全名(含.lib后缀)
注意,这里是动态库导入库,不是静态库

配置boost库
有的mysql版本,还需要配置boost库
下载好boost库之后,来到这个位置

将该路径添加到"附加包含目录"
之后来到这个位置:

添加到"附加库目录"
不用添加"依赖项"
拷贝mysql Connect相关的动态库到当前程序可执行文件目录内

将上述动态库文件,复制


先生成一下,可以找到所编译生成的exe文件所在目录
将上面四个动态库 拷贝到exe所在目录
如上述测试需要用到代码,使用:
cpp
#include <mysql_driver.h>
#include <mysql_connection.h>
#include <cppconn/statement.h>
#include <cppconn/resultset.h>
#include <cppconn/exception.h>
#include <iostream>
int main() {
try {
// 创建 MySQL 驱动对象
sql::mysql::MySQL_Driver* driver;
sql::Connection* con;
sql::Statement* stmt;
sql::ResultSet* res;
// 初始化 MySQL 驱动
driver = sql::mysql::get_mysql_driver_instance();
// 连接到 testdb 数据库,假设用户名为 "root" 和密码为 "password"
con = driver->connect("tcp://127.0.0.1:3306", "root", "123456");
// 选择 testdb 数据库
con->setSchema("winstudydb");
// 创建 SQL 查询语句
stmt = con->createStatement();
res = stmt->executeQuery("SELECT * FROM books");
// 遍历并输出结果
while (res->next()) {
std::cout << "book_id: " << res->getInt("book_id") << "\n";
std::cout << "title: " << res->getString("title") << "\n";
std::cout << "author: " << res->getString("author") << "\n";
std::cout << "published_date: " << res->getString("published_date") << "\n";
std::cout << "--------------------------" << std::endl;
}
// 释放资源
delete res;
delete stmt;
delete con;
}
catch (sql::SQLException& e) {
std::cerr << "MySQL error: " << e.what() << std::endl;
}
return 0;
}
代码
头文件的作用

代码解析

一般想在C++程序中操作数据库,就是这些操作,如上图1-6
实现需求
架构



显示菜单

为什么要getchar(),因为什么有一个cin>>choice,他不会读取最后的换行符
所以,使用getchar()读取这个剩余的换行符
还可以使用cin.ignore()代替
而之后的getline会读取最后的换行符,但是不会读到目标字符串中,而是丢弃,所以后续的getline也可以顺利读取,不会读到多余换行符

注意,sql注入时,要将string变量转为const char *,使用c_str()方法