MFC下使用Mysql
MFC工程需要使用Mysql数据库中遇到的问题记录下。
1、首先去官网下载下Mysql安装包,安装下Mysql。
我在这边下载的是mysql-installer-community-5.7.16.0.msi,因为是默认安装,所以会根据系统是64位还是32位,来安装64位的mysql或者32位的mysql。
我的操作系统是64位的,所以安装后的mysql也是64位的,而我的MFC工程是32位的,所以安装目录得到的libmysql.lib文件使用。
解决方法:把64位的mysqlserver卸载,然后安装32位的mysqlserver。直接remove就行,卸载完,同样在这个界面Add就行。因为我的电脑已经做过这个操作了,所以显示的mysqlserver已经x86了。

2、到mysqlserver目录里得到libmysql.lib文件和include头文件,自己的MFC工程引入即可。


3、使用MySQL有如下几个步骤
- 通过调用 mysql_library_init()来初始化MySQL库。
- 通过调用 mysql_init()来初始化一个连接句柄。
- 通过调用mysql_real_connect()来连接服务器。
- 使用SQL语句操作数据库,并处理这些结果。
- 通过调用mysql_close()来关闭MySQL服务器的连接。
- 通过调用 mysql_library_end()来终止使用MySQL库。
4、假如我们使用的database,是需要自己先创建,应该先用mysql_real_connect连接什么。
我们可以先连接默认的database:mysql,然后去创建我们需要的database,然后再切换过去。
bool MySQLServer::createDatabase(LPCTSTR dbname)
{
std::string queryStr = "create database if not exists ";
queryStr += dbname;
queryStr += " DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;";
if ( == mysql_query(&mysqlInstance, queryStr.c_str()))
{
queryStr = "use ";
queryStr += dbname;
if ( == mysql_query(&mysqlInstance, queryStr.c_str()))
{
return true;
} }
errorIntoMySQL();
return false;
}
5、mysql断开后如何自动连接?
mysql默认的是连接时长是8小时,如果8小时内,没有数据进行交互,就会断开连接,所以我们希望断开后,能够自动重连。
在database连接之后,调用下面的setReconnect函数,设置下重连。
bool MySQLServer::setReconnect()
{
char reconnect = ;
mysql_options(&mysqlInstance, MYSQL_OPT_RECONNECT, (char *)&reconnect);
return true;
}
6、对于多线程的查询和写入执行等操作时,一定要加锁操作,否则会有崩溃风险
如写入操作:
//写入数据
bool MySQLServer::mysql_execsql(LPCTSTR queryStr)
{
m_DataBaseMutex.lock();
if ( == mysql_query(&mysqlInstance, queryStr))
{
m_DataBaseMutex.unlock();
return true;
}
else
{
errorIntoMySQL();
}
m_DataBaseMutex.unlock();
return false;
}
查询操作:
//读取数据
int MySQLServer::readDatafromDB(LPCTSTR queryStr, Json::Value & result)
{
m_DataBaseMutex.lock();
if ( != mysql_query(&mysqlInstance, queryStr))
{
errorIntoMySQL();
m_DataBaseMutex.unlock();
return -;
} MYSQL_RES *sqlResult = NULL;
sqlResult = mysql_store_result(&mysqlInstance); int row = (int)mysql_num_rows(sqlResult);
int field = (int)mysql_num_fields(sqlResult);
MYSQL_FIELD* fieldArray = mysql_fetch_field(sqlResult); MYSQL_ROW lineData = NULL;
lineData = mysql_fetch_row(sqlResult); int row_no = ;
std::string temp;
while (NULL != lineData)
{
for (int i = ; i<field; i++)
{
if (lineData[i])
{
temp = lineData[i];
result[row_no][fieldArray[i].name] = temp;
}
else
{
temp = "";
result[row_no][fieldArray[i].name] = temp;
}
}
row_no++;
lineData = mysql_fetch_row(sqlResult);
} mysql_free_result(sqlResult);
m_DataBaseMutex.unlock();
return row;
}
7、如果涉及到多线程的频繁查询和写入的话,最好创建多个连接,每个线程操作一个连接,否则也会有崩溃的风险
MFC下使用Mysql的更多相关文章
- 如何在删除ibdata1和ib_logfile的情况下恢复MySQL数据库
昨天,有个朋友对公司内部使用的一个MySQL实例开启binlog,但是在启动的过程中失败了(他也没提,为何会失败),在启动失败后,他删除了ibdata1和ib_logfile,后来,能正常启动了,但所 ...
- Linux学习之CentOS(二十)--CentOS6.4下修改MySQL编码方法
但是当我们在试图对数据库中的数据进行备份或者将sql文件导入到我们的数据库时可能就会碰到编码的问题,在windows下安装mysql时我们可以在安装的时候就选择好整个数据库的编码方式(通常设置成utf ...
- Linux下安装 MySQL
Ubuntu环境 使用二进制安装包安装,相对简单绿色 1.到官网下载二进制压缩包http://dev.mysql.com/downloads/mysql/ 2.选择需要的版本 目前最新为5.7.之后选 ...
- Linux下修改Mysql的用户(root)的密码
修改的用户都以root为列.一.拥有原来的myql的root的密码: 方法一:在mysql系统外,使用mysqladmin# mysqladmin -u root -p password " ...
- Ubuntu下的MySQL安装
<1>安装mysql-server sudo apt-get update sudo apt-get install mysql-server mysql-client <2> ...
- Ubuntu 下安装 Mysql
这里讲用Ubuntu下安装MySql ubuntu上安装mysql非常简单只需要几条命令就可以完成. 1. sudo apt-get install mysql-server 2. apt-get ...
- ubuntu16.04.1下的mysql修改默认编码
在Ubuntu 下配置 Mysql 的字符编码.安装完 Mysql 后,系统默认的字符编码是 latin1 ,输入的是中文,可是输出却是一堆乱码.现在要做的就是把 Mysql的默认字符编码设置为支持中 ...
- ubuntu 下安装mysql,以及配置远程登录
安装MysQL 在Ubuntu14.04下安装MySQL比较简单,只需下面这条命令就行了: 1.输入 sudo apt-get install mysql-server 2.继续执行后,需要设定MyS ...
- MFC下OpenGL入门(可以用)
MFC下OpenGL入门 源文件 1, 建一工程文件,我这里命名为first,现在first工程里面我们没有添加任何东西,所有的东西都是MFC自动帮我们创建的. 2, 添加链接库.这一步很关键.打开菜 ...
随机推荐
- IP地址和int互转
/** * @author: yqq * @date: 2019/5/8 * @description: ip地址与int之间互换 * https://mp.weixin.qq.com/s?__biz ...
- Markdown 直接转换公众号文章,不再为排版花时间
上一篇「又一家数据公司被查,爬虫到底做错了什么?」反响强烈,虽然我这是新号,但还是获得了不少公众号的转发,借机也结识了很多业内大佬,在此感谢大家的抬爱! 同时也有不少号主问我的文章排版是用的哪个网站, ...
- JSP实例:彩色验证码
本例使用一个JavaBean,名为Image.java,包com.zempty.bean下; 三个JSP文件,分别为image.jsp.login.jsp.check.jsp.其中login.jsp是 ...
- 面试官: 聊一聊Babel
点击关注本公众号获取文档最新更新,并可以领取配套于本指南的 <前端面试手册> 以及最标准的简历模板. 前言 Babel 是现代 JavaScript 语法转换器,几乎在任何现代前端项目中都 ...
- shiro+spring
公司自用的管理系统使用了shiro,但是对于这个登录页面跳转.登录的过程逻辑以及登录成功或者失败的跳转页面一直不理解,查看相关文档资料,整理出一些结果并本地调试测试,记录下备以后回顾之用. 对于spr ...
- Docker下实战zabbix三部曲之一:极速体验
对于想学习和实践zabbix的读者来说,在真实环境搭建一套zabbix系统是件费时费力的事情,本文内容就是用docker来缩减搭建时间,目标是让读者们尽快投入zabbix系统的体验和实践: 环境信息 ...
- Linux 笔记:核心思想、常用命令以及脚本语法
总结于 <鸟哥的 Linux 私房菜 - 基础学习篇> ,图片也来自于此. 核心思想 目录树结构(directory tree) Linux 系统是基于目录树结构的,这是它的核心思想.目录 ...
- SpringBootSecurity学习(02)网页版登陆配置类代替默认配置
增加Security配置类 前面演示了一个简单的登录入门例子,使用springboot-security默认的配置实现,虽然非常简单,但是基本实现了登录功能.不过在生产环境下,显然不能仅仅使用如此简单 ...
- 一步步构建.NET Core Web应用程序---基本项目结构
前言 随着.NET Core日益成熟, 我作为C#&.NET体系中的一份子也加入了.NET Core 这一体系中,随着不断学习, 接触到的各种框架日益庞杂,接下来我会由一个新手的角度把整个基于 ...
- Graphlab create的基本使用
写在前面 GraphLab Create 是一款机器学习的函数库,其中的SFrame也是十分强大的数据管理工具.它允许直接从硬盘中读取数据,免于将数据全部加载到内存中.这就使得对于大数据的处理成为可能 ...