Visual C++连接数据库
MySQL是一个关系型数据库管理系统,关系数据库将数据保存在不同的表中。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。
一、Windows下安装MySQL
1.下载安装
- 首先给出MySQL的下载链接:
mysql-8.0.23-winx64.zip - 将下载好的安装包解压到自定义的目录
2.配置数据库
WIN + R调出运行窗口,输入cmd。将目录切换到MySQL解压目录下的bin目录。如下图所示。
- 初始化数据库
输入命令mysqld --initialize --console
,并记录随机生成的密码 - 安装 mysql 的Windows服务
输入命令mysqld -install
- 启动 mysql 服务
输入命令net start mysql
- 登陆数据库
输入命令mysql -u root -p
登陆数据库,密码为前面记录的临时密码 - 如果需要修改密码,可以参考博客
二、配置Visual studio
1. 创建项目编写代码
- 创建空项目
- 添加源文件,这里给出一个源文件的示例
//C++连接MySQL
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <iomanip>
#include <mysql.h>
using namespace std;
#pragma comment(lib,"libmysql.lib")
#pragma comment(lib,"wsock32.lib")
int main()
{
MYSQL conn;
MYSQL_RES* result; //存储查询等结果
MYSQL_ROW sql_row; //查询返回行数
const char* username = "xxx"; //用户名 (or const char username[])
const char* passwd = "xxx"; //密码
const char* host = "localhost"; //地址 or"127.0.0.1"
const char* database = "test"; //数据库database
unsigned int port = 3306; //端口号server port
int res;
if (!mysql_init(&conn))
{//初始化一个MYSQL 连接的实例对象,失败
cout << "[mysql_init() error] " << mysql_error(&conn) << endl;
exit(EXIT_FAILURE); //EXIT_FAILURE是stdlib.h中定义的: #define EXIT_FAILURE 1;表示没有成功地执行一个程序
}
if (!mysql_real_connect(&conn, host, username, passwd, database, port, NULL, 0))
{
cout << "[mysql_real_connect() error] " << mysql_error(&conn) << endl;
exit(EXIT_FAILURE);
}
mysql_query(&conn, "SET NAMES GBK"); //设置编码格式,否则在cmd下无法显示中文
//const char* sql_query = "select * from test";//database下有相应的表才能成功
const char* sql_query = "select * from student";//database下有相应的表才能成功
if (mysql_query(&conn, sql_query))
{
cout << "[mysql_query() (sql:" << sql_query << ")error]" << mysql_error(&conn) << endl;
exit(EXIT_FAILURE);
}
result = mysql_store_result(&conn);//保存查询到的数据到result
if (result)
{
int rows = mysql_num_rows(result);
int fileds = mysql_num_fields(result);//
cout << "The total rows is (" << sql_query << "): " << rows << endl;
cout << "The total fileds is : " << fileds << endl;
MYSQL_FIELD* fd;
fd = mysql_fetch_field(result);//获得字段名
for (int i = 0; i < fileds; i++)
{//获取列名
cout << std::left << std::setw(14); cout << fd[i].name;//对齐输出,setw函数是对齐用到的
}
cout << endl; //列名输出结束
while ((sql_row = mysql_fetch_row(result)))
{//获取具体的数据(每次获取一行)
for (int j = 0; j < fileds; j++)
{
if (sql_row[j] == NULL) {//防止内容为空,程序崩溃
cout << "null";
}
else {
cout << std::left << std::setw(14); cout << sql_row[j];
}
}
cout << endl;
}//表数据输出结束
}
mysql_close(&conn);//断开连接,释放一个MYSQL 连接实例
return 0;
}
直接运行,会报错:fatal error C1083: 无法打开包括文件: “mysql.h”: No such file or directory
。需要对项目环境进行配置。
2.项目环境配置(Debug平台为 x64)
(1) 复制 lib 和 dll 文件
将MySQL Server安装目录下 lib 内的 libmysql.lib 和 libmysql.dll,复制到C:\Windows\System32下。
(2)点击 项目→xxx属性
(3)C/C++→常规→附加包含目录:填写MySQL Server安装目录下include路径
(4)链接器→常规→附加库目录:填写MySQL Server安装目录下lib路径
(5)C/C++→预处理器→预处理器定义: _CRT_SECURE_NO_WARNINGS;
3. 调试
注意: 调试器要与项目属性配置一致,即Debug-x64
然而,现在直接运行还会报错:[mysql_real_connect() error] Access denied for user 'xxx'@'localhost' (using password: YES)
这是因为在源代码中,我们未将 username 和 passwd 改为自己MySQL数据库对应的用户名和密码。修改之后继续运行,原来的错误消失了。
出现了新的错误,[mysql_query() (sql:select * from test)error]Table 'test.test' doesn't exist
这是因为我们还没有新建表 test.test 。
三、 新建表
在 test 数据库中新建 test 数据表,SQL 语句和运行结果如下:
mysql> USE test;
Database changed
mysql> CREATE TABLE test (
-> id INT(4),
-> name VARCHAR(20),
-> sex CHAR(1));
Query OK, 0 rows affected, 1 warning (3.82 sec)
使用 DESC 查看 student 表结构,SQL 语句和运行结果如下:
mysql> DESC test;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.38 sec)
在MySQL中输入 show databases;
查看数据库,SQL 语句和运行结果如下:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.14 sec)
可以看出存在 test 数据库,数据库配置无误。
在MySQL中输入 show tables;
查看表,SQL 语句和运行结果如下:
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| student |
| test |
+----------------+
2 rows in set (0.12 sec)
由此可以看出已经建立了test表。再次运行程序,输出正确:
总结
本文首先介绍了MySQL数据库的下载安装,之后对 Visual studio 2017 的项目环境进行配置,最后给出了一个连接MySQL数据库的简单 C++ demo 代码。
参考文献
- https://blog.csdn.net/ychgyyn/article/details/84404217
- https://blog.csdn.net/weixin_36466834/article/details/111604663?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242
- https://www.php.cn/mysql-tutorials-460359.html
- https://blog.csdn.net/Along_168163/article/details/99057831