文章目录
- 引言
- 1. 建立一个MFC对话框项目
- 2. 控件布局
- 2.1 添加控件
- 2.2 引入List Control控件类
- 2.3 定义控件变量
- 2.4 添加按钮点击响应函数
- 2.4 初始化List Control控件:
- 3. 配置MySQL
- 3.1 配置永久型MySQL属性表
- 3.2 更改配置时重新加载MySQL属性表
- 4. MFC中使用MySQL数据库
- 4.1 Navicat连接MySQL数据库,并建立WaitFOF数据库
- 4.2 MFC中连接WaitFOF数据库
- 4.3 向数据库中插入数据
引言
在MySQL的官网中,查看文档资料,找到Connectors & APIs,可以看到关于如何连接到MySQL的使用说明文档。
-
Connector / C ++
使C ++应用程序可以连接到MySQL。 -
Connector / J
为使用标准Java数据库连接(JDBC)API从Java应用程序连接到MySQL提供驱动程序支持。 -
Connector/NET
使开发人员可以创建连接到MySQL的.NET应用程序。连接器/ NET实现了功能齐全的ADO.NET接口,并提供了与ADO.NET感知工具一起使用的支持。可以使用任何受支持的.NET语言编写使用Connector / NET的应用程序。 -
MySQL for Visual Studio
可与Connector / NET和Microsoft Visual Studio 2012、2013、2015和2017配合使用。适用于Visual Studio的MySQL提供对来自Visual Studio的MySQL对象和数据的访问。作为Visual Studio软件包,它直接集成到Server Explorer中,从而能够创建新连接并使用MySQL数据库对象。 -
Connector/ODBC
为使用开放数据库连接(ODBC)API连接到MySQL提供了驱动程序支持。支持从Windows,Unix和macOS平台进行ODBC连接。 -
Connector / Python
提供驱动程序支持,以使用兼容Python DB API版本2.0的API从Python应用程序连接到MySQL 。不需要其他Python模块或MySQL客户端库。 -
Connector/Node.js
提供了一个异步API,用于使用X协议从Node.js应用程序连接到MySQL。Connector / Node.js支持管理数据库会话和架构,使用MySQL Document Store集合以及使用原始SQL语句。
用于MySQL的库和接口:
本文介绍采用C API的方式连接MySQL数据库
。
1. 建立一个MFC对话框项目
- 新建MFC应用程序,项目名称:
MySQLUseTest
- 选择
基于对话框
: - 项目创建完成。
- 点击项目,改成 ‘
使用多字节字符集
’:
2. 控件布局
2.1 添加控件
- 添加如下几个控件:
控件 | ID | capture |
roup Box | IDC_STATIC | 信息录入 |
Static Text | IDC_STATIC | 姓名: |
Edit Control | IDC_NAME | |
Static Text | IDC_STATIC | 性别: |
Radio Button | IDC_RADIO1 | 女 |
Radio Button | IDC_RADIO2 | 男 |
Static Text | IDC_STATIC | 联系电话: |
Edit Control | IDC_PHONE | |
List Control | IDC_LIST | |
Button | IDC_BUTTON1 | 录入 |
其中:IDC_RADIO1的组属性设置为TRUE
布局如下:
2.2 引入List Control控件类
- 将List控件类文件夹
CListControl
添加到当前项目中: - 项目中新建筛选器
CListControl
,右键添加现有项,选择CListControl文件中的四个文件: - 在文件
MySQLUseTestDlg.h
中添加头文件:#include"CListControl/ListCtrlCl.h"
:
2.3 定义控件变量
- 类向导增加控件/值变量:
控件ID | 类别 | 变量类型 | 名称 |
IDC_BUTTON1 | 控件 | CButton | m_submitBT |
IDC_LIST | 控件 | CListCtrlCl | m_listCtrl |
IDC_NAME | 值 | CString | m_name |
IDC_RADIO1 | 值 | int | m_sex |
IDC_PHONE | 值 | CString | m_phone |
2.4 添加按钮点击响应函数
- 双击录入按钮,自动添加响应点击函数
OnBnClickedButton1
:
2.4 初始化List Control控件:
- 在OnInitDialog()函数中添加:
//设置List Control 控件的样式
DWORD dwStyle = m_listCtrl.GetExtendedStyle(); //listcontrol部分
dwStyle |= LVS_NOCOLUMNHEADER;
dwStyle |= LVS_EX_GRIDLINES;
m_listCtrl.SetExtendedStyle(dwStyle);
CRect rect;
//获取list列表的宽和高
m_listCtrl.GetWindowRect(&rect);
int weightOfList = rect.Width();
m_listCtrl.SetBkColor(RGB(255, 255, 255)); //设置背景色
m_listCtrl.SetRowHeigt(40); //设置行高度
m_listCtrl.SetHeaderHeight(float(1.2)); //设置头部高度
m_listCtrl.SetHeaderFontHW(20, 0); //设置头部字体高度,和宽度,0表示缺省,自适应
m_listCtrl.SetHeaderTextColor(RGB(255, 255, 255)); //设置头部字体颜色
m_listCtrl.SetTextColor(RGB(0, 0, 0)); //设置文本颜色
m_listCtrl.SetHeaderBKColor(0, 100, 0, 0); //设置头部背景色
m_listCtrl.SetFontHW(20, 0); //设置字体高度,和宽度,0表示缺省宽度
//设置表头:
m_listCtrl.InsertColumn(0, "编号", LVCFMT_CENTER, weightOfList/4);
m_listCtrl.InsertColumn(1, "姓名", LVCFMT_CENTER, weightOfList / 4);
m_listCtrl.InsertColumn(2, "性别", LVCFMT_CENTER, weightOfList / 4);
m_listCtrl.InsertColumn(3, "联系方式", LVCFMT_CENTER, weightOfList / 4);
- 运行界面如下:
3. 配置MySQL
3.1 配置永久型MySQL属性表
当前项目的解决方案配置是
Debug
,解决方案平台是x64
:
- 在属性管理器中对应运行环境
Debug|x64
下新建项目属性表: - 将新建的属性表保存在共用的属性表文件夹下,以后可以直接载入任意项目中,名称为
MySQL_x64.props
: - 点击新生成的属性表,找到VC++目录—>包含目录,选择mysql的安装路径下的include文件夹:
- 找到VC++目录—>包含目录,选择mysql的安装路径下的lib文件夹:
结果如下: - 找到链接器 –> 输入 –> 附加依赖项,把
libmysql.lib
添加进去:
此处的libmysql.lib是MySQL安装路径中lib包中的文件:
- 将 MySql 安装目录下lib文件中的
libmysql.dll
和libmysql.lib
两个文件拷贝到当前项目中,并拷贝到生成的x64目录下的Debug目录中。
否则运行时会提示缺少此库:
3.2 更改配置时重新加载MySQL属性表
- 若解决方案配置改成
Release
: - 项目在
Release|x64
下更改成使用多字节字符集
: - 属性管理器的
Release|x64
中右键选择添加现有属性表
:
若想使用win32平台,则需要重新在WIN32下更改项目的字符集和添加属性表。
4. MFC中使用MySQL数据库
4.1 Navicat连接MySQL数据库,并建立WaitFOF数据库
- 在Navicat中连接好MySQL数据库(在VS+MySQL1中讲解过连接方法),右键连接数据库,并在此数据库下右键新建一个数据库,名为WaitFOF:
- 在WaitFOF数据库中新建一个表叫people:
4.2 MFC中连接WaitFOF数据库
- MySQLUseTestDlg.h中添加MySQL的头文件:
//因为数据库是通过网络连接的,必须包含网络相关头文件
#include "winsock.h"
//mysql头文件
#include "mysql.h"
- 在MySQLUseTestDlg.h中创建MySQL对象:
MYSQL m_sql;
- 在OnBnClickedButton1函数中初始化数据库对象,并验证是否连接成功:
//初始化数据库对象
mysql_init(&m_sql);
if (!mysql_real_connect(
&m_sql, //数据库对象
"localhost", //localhost:服务器地址,可以直接填入IP;
"root",//账号;
"admin", //密码
"waitfof", //数据库名
3306, //网络端口
NULL,
0))
{
AfxMessageBox(_T("数据库连接失败!"));
}
else
{
AfxMessageBox(_T("数据库连接成功!"));
}
- 点击按钮:
4.3 向数据库中插入数据
- 将录入的信息保存到WaitFOF数据库的people表中:
void CMySQLUseTestDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//初始化数据库对象
mysql_init(&m_sql);
if (!mysql_real_connect(&m_sql, "localhost", "root",
"admin", "waitfof", 3306, NULL, 0))
{
AfxMessageBox(_T("数据库连接失败!"));
}
else
{
UpdateData(true);
//设置数据库字符格式,解决中文乱码问题
mysql_query(&m_sql, "set names 'gb2312'");
char* name = (char*)m_name.GetBuffer();
char* sex;
if (m_sex == 0)
{
sex = "女";
}
else {
sex = "男";
}
char* phone = (char*)m_phone.GetBuffer();
char insert[100];
sprintf_s(insert, "insert into people(name, sex, phone) values (\'%s\', \'%s\', \'%s\')", name, sex, phone);
// 执行 sql 语句。
// mysql_query() 的返回值份很多情形, 进行判断使要注意。
if (mysql_query(&m_sql, insert) == 0)
{
AfxMessageBox(_T("插入数据成功!"));
}
else {
AfxMessageBox(_T("插入数据失败!"));
}
UpdateData(false);
mysql_close(&m_sql);//关闭Mysql连接
}
}
- 输入录入信息,点击录入按钮:
- 最终可以看到Navicat中的WaitFOF数据库中的people表的内容在增加,且ID作为主键在自增: