前言
时隔了不知道多久,笔者需要在Windows环境下通过VSCode重新搭建一个简单的数据库连接的Cpp工程。由于VSCode和MySQL的版本和之前连通时发生了一些变化,无需用MySQL Connector,环境配置的细节和之前也不尽相同,因此笔者找了一些资料,重新整理了一遍,以便重现。
本文推荐读者有对基本的MySQL规则了解,以及有VSCode基础的情况下进行实操。对于MySQL和VSCode的安装,请读者自行根据其他网络资料进行搭建,本文不再赘述。
1. 进入VSCode,配置两个json文件
1)c_cpp_properties.json
打开vscode,按下ctrl+shit+p,如下,选择编辑C/C++配置,会自动创建一个名为c_cpp_properties.json 的文件
读者需要在 c_cpp_properties.json 文件中设置 includePath,以正确包含.h头文件
之后,需要确认一下编译器是否是 g++,而非 gcc。如果是 gcc,需要将红框中的部分改为g++,其余地方的gcc暂且可以不管。
这里给出c_cpp_properties.json文件的参考:
Cobol
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"C:\\Program Files\\MySQL\\MySQL Server 8.0\\include"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "C:\\msys64\\ucrt64\\bin\\g++.exe",
"cStandard": "c17",
"cppStandard": "gnu++17",
"intelliSenseMode": "windows-gcc-x64"
}
],
"version": 4
}
2)tasks.json
tasks.json的获取可以通过按下ctrl+shit+d,在运行和调试下通过创建launch.json文件
在这个操作后,得到 launch.json 的同时,可以得到 task.json
tasks.json 用来定义 g++ 的编译指令, -I 和 -L 则指定了编译时 include 头文件和 lib 链接的位置。通常,如果 -I 的内容设置错误,会导致程序中的类或函数无法找到;如果 -L 的内容设置错误,则容易出现运行时的链接错误。
我们找到 MySQL Server 安装路径下所包含的 lib 和 include 目录,将他们包含到这里
MySQL Server 安装路径可以右键Command Line Client寻找
并且将检查编译器,是否正确指定为 g++
2. 将 libmysql.dll 放到待编译的cpp文件同目录下
这个 dll 文件在上述lib目录中,复制到工程目录下即可。
如下所示:
3. 编写示例程序:
代码如下:
cpp
#include<iostream>
#include <mysql.h>
int main(){
MYSQL *mysql = mysql_init(0);
if(!mysql_real_connect(mysql,"localhost","user","password","mybase",0,0,0)) // 注意改成自己的
{
printf("连接数据库出错:%s",mysql_error(mysql));
return -1;
}
std::cout << "DB connect success" << std::endl;
if(mysql_query(mysql,"insert into mentor values ('abandon','zzz')"))
{
printf("Info : %s",mysql_error(mysql));
}
return 0;
}
这个例子中要求你先在Mysql中建立一个名为mybase的数据库,以及一个名为mentor的表。
可以先通过MySQL的Command Line Client进行打开,执行以下SQL指令:
sql
-- 查看数据库,进入数据库,查看表
show databases;
use mybase;
show tables;
-- 创建表 mentor
CREATE TABLE `mentor` (
`name` varchar(20) NOT NULL,
`t_name` varchar(100) NOT NULL,
PRIMARY KEY (`name`),
UNIQUE KEY `t_name` (`t_name`)
)
4. 对cpp文件编译&运行:
在VSCode中,对示例工程进行运行和调试
可以看到打印 DB 连接成功,正确调用 mysql_query() 。
(由于笔者这里已经写入过一次该数据,接收到的Info是提示我该主键已经存在。读者第一次运行成功则不会打印该信息)
进入 Command Line Client 中,通过select指令进行查看:
可以看到该条信息已经被插入,至此完成。