参考:
官网VisualStudio连接MySQL教程
使用MySQL connector/C++链接MySQL数据库
C++ API方式连接mysql数据库实现增删改查
C++连接mysql数据库的两种方法
【C++】VS2015/VS2017连接Mysql数据库教程
实验室需要使用C++进行数据库应用开发,现将MySQL连接的过程记录如下:
环境搭建
Windows10、VS2017、MySQL8.0、MySQL Connector/C++ 1.1.11、boost1.67.0
1、创建学生管理系统数据库
MySQL数据库的安装过程这里不详细介绍,具体参考win10系统,mysql-installer-community-5.7.21.msi安装安装好MySQLServer以后,在控制台中创建数据库,输入
create database university;
这里为了简单测试,只是创建一张学生表,创建的表如下:
create table student(
Sno int ,
Sname varchar (50),
Ssex varchar(2),
Sage int ,
primary key (Sno)
);
插入数据:
为简单起见,这里只插入俩条数据
insert into student(Sno, Sname, Ssex, Sage) values(20081001197,'李子聪','M',17);
insert into student(Sno, Sname, Ssex, Sage) values(20081001266,'蔡景学','F',19);
创建好的结果如下:
在数据库命令行查看:
select * from student;
项目配置
配置依赖前,先将默认的Debug
模式改为Release
模式
1、新建TestMySQLAPP
控制台项目
这里或者直接新建一个空项目也可以
2、依赖配置
右键项目->属性->VC++目录
在包含目录
点击编辑
将已经下载解压好的Connector C++ 1.1.11
的\include
文件夹添加进去
比如我的解压包路径是
C:\Program Files\MySQL\Conector C++ 1.1.11\mysql-connector-c++-noinstall-1.1.11-winx64\include
以同样的方式将boost1.67.0
文件目录包含
我的解压包路径是:
D:\Boost1.67.0\boost_1_67_0
这里需要说一下为什么需要将boost
库包含进去,开始的时候我没有包含这部分,但是在运行过程中在mysql_connection.h
文件中又引用了这个库,我开始想着直接把其中引用部分的代码路径改一下,让其指向boost包对应的路径,结果发现修改后没有保存权限,所以还是老老实实将这个库目录包含进去
配置好以上的以后接下来将Connector/C++
的lib包含进去,还是在项目的属性页
链接器->常规->附加库目录
以同样的方式添加,比如我的路径是
C:\Program Files\MySQL\Conector C++ 1.1.11\mysql-connector-c++-noinstall-1.1.11-winx64\lib
添加以后的结果如下:
接着在链接器->输入
部分将mysqlcppconn.lib
添加
到这里基本上就将所有的配置完成,但是在运行过程中还是出现了一些错误,这部分没有截图,所以直接将解决的方法记录,参考的文章不记得是哪些博客,这里表示感谢
简单来说就是需要将对应的一些动态库添加到C:\Windows\System32
目录中,这里我不太清楚为什么会出现错误,按照我的想法是在之前的配置中已经把Connector
的lib
全部添加到了项目中,为什么这里还是要把一些动态的库文件放到C:\Windows\System32
目录,但是确实结果是解决了问题。找到Connector/C++
解压包路径,比如我的是
C:\Program Files\MySQL\Conector C++ 1.1.11\mysql-connector-c++-noinstall-1.1.11-winx64\lib
将其中的.dll
文件全部拷贝粘贴到C:\Windows\System32
目录,然后运行即可
测试连接
环境已经搭建完成,接下来测试一些简单的功能,在TestMySQLAPP.cpp
文件中
这个文件其实就是你创建空项目的Main.cpp
,也就是程序的入口,添加以下代码:
#include <stdafx.h>
#include <stdlib.h>
#include <iostream>
#include "mysql_connection.h"
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
using namespace std;
int main()
{
cout << endl;
cout << "正在执行 SELECT sage from student where sno = '20081001197'" << endl;
try {
sql::Driver *driver;
sql::Connection *con;
sql::Statement *stmt;
sql::ResultSet *res;
/* 创建连接 */
driver = get_driver_instance();
con = driver->connect("tcp://127.0.0.1:3306", "root", "root"); // 需要修改为你数据库的用户密码
/* 连接 MySQL 数据库 university */
con->setSchema("university");
stmt = con->createStatement();
res = stmt->executeQuery("SELECT sage from student where sno = '20081001197'"); // 标准sql语句
while (res->next()) {
cout << "\t MySQL replies: ";
/* 通过数字偏移量, 1 代表第一列 */
cout << res->getInt(1)<< endl;
}
delete res;
delete stmt;
delete con;
}
catch (sql::SQLException &e) {
cout << "# ERR: SQLException in " << __FILE__;
cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
cout << "# ERR: " << e.what();
cout << " (MySQL error code: " << e.getErrorCode();
cout << ", SQLState: " << e.getSQLState() << " )" << endl;
}
cout << endl;
return EXIT_SUCCESS;
}
结果:
与数据库中结果一致,正确连接!