文章目录

  • 引言
  • 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 向数据库中插入数据



vs建一个mysql数据库_MFC

引言

在MySQL的官网中,查看文档资料,找到Connectors & APIs,可以看到关于如何连接到MySQL的使用说明文档。

vs建一个mysql数据库_C API_02

  • 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的库和接口:

vs建一个mysql数据库_C API_03


本文介绍采用C API的方式连接MySQL数据库

1. 建立一个MFC对话框项目

  1. 新建MFC应用程序,项目名称:MySQLUseTest
  2. vs建一个mysql数据库_vs建一个mysql数据库_04

  3. 选择基于对话框
  4. vs建一个mysql数据库_C API_05

  5. 项目创建完成。
  6. 点击项目,改成 ‘使用多字节字符集’:
  7. vs建一个mysql数据库_vs建一个mysql数据库_06

2. 控件布局

2.1 添加控件

  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

vs建一个mysql数据库_MFC_07

布局如下:

vs建一个mysql数据库_MySQL_08

2.2 引入List Control控件类

  1. 将List控件类文件夹CListControl添加到当前项目中:
  2. 项目中新建筛选器CListControl,右键添加现有项,选择CListControl文件中的四个文件:
  3. 在文件MySQLUseTestDlg.h中添加头文件:#include"CListControl/ListCtrlCl.h"

2.3 定义控件变量

  1. 类向导增加控件/值变量:

控件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 添加按钮点击响应函数

  1. 双击录入按钮,自动添加响应点击函数OnBnClickedButton1

2.4 初始化List Control控件:

  1. 在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);
  1. 运行界面如下:

3. 配置MySQL

3.1 配置永久型MySQL属性表

当前项目的解决方案配置是Debug,解决方案平台是x64

vs建一个mysql数据库_MySQL_09

  1. 在属性管理器中对应运行环境Debug|x64下新建项目属性表:
  2. 将新建的属性表保存在共用的属性表文件夹下,以后可以直接载入任意项目中,名称为MySQL_x64.props
  3. 点击新生成的属性表,找到VC++目录—>包含目录,选择mysql的安装路径下的include文件夹:
  4. 找到VC++目录—>包含目录,选择mysql的安装路径下的lib文件夹:

    结果如下:
  5. 找到链接器 –> 输入 –> 附加依赖项,把libmysql.lib添加进去:

此处的libmysql.lib是MySQL安装路径中lib包中的文件:

vs建一个mysql数据库_mysql_10

  1. 将 MySql 安装目录下lib文件中的 libmysql.dlllibmysql.lib 两个文件拷贝到当前项目中,并拷贝到生成的x64目录下的Debug目录中。

否则运行时会提示缺少此库:

vs建一个mysql数据库_MySQL_11

3.2 更改配置时重新加载MySQL属性表

  1. 若解决方案配置改成Release
  2. 项目在Release|x64下更改成使用多字节字符集
  3. 属性管理器的Release|x64中右键选择添加现有属性表

若想使用win32平台,则需要重新在WIN32下更改项目的字符集和添加属性表。

4. MFC中使用MySQL数据库

4.1 Navicat连接MySQL数据库,并建立WaitFOF数据库

  1. 在Navicat中连接好MySQL数据库(在VS+MySQL1中讲解过连接方法),右键连接数据库,并在此数据库下右键新建一个数据库,名为WaitFOF:
  2. 在WaitFOF数据库中新建一个表叫people:

4.2 MFC中连接WaitFOF数据库

  1. MySQLUseTestDlg.h中添加MySQL的头文件:
//因为数据库是通过网络连接的,必须包含网络相关头文件  
#include "winsock.h"  
//mysql头文件  
#include "mysql.h"
  1. 在MySQLUseTestDlg.h中创建MySQL对象:
MYSQL m_sql;
  1. 在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("数据库连接成功!"));
}
  1. 点击按钮:

4.3 向数据库中插入数据

  1. 将录入的信息保存到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连接  
	}
}
  1. 输入录入信息,点击录入按钮:
  2. 最终可以看到Navicat中的WaitFOF数据库中的people表的内容在增加,且ID作为主键在自增: