前言:
一直以来操作数据库我用的都是python,第一次使用C++来操作Mysql数据库,中间遇到了许多问题,特别是Mysql版本为64位,但想在x86或win32下开发Mysql的问题。把这些经验进行总结,希望可以帮到遇到同样问题的朋友。如果对您有帮助,您的三连是对我最大的鼓励,谢谢。
顺带一提:
环境配置:
操作系统:win10 64bit
开发环境:Visual Studio 2019
使用的Mysql版本:8.0
首先是运行环境,因为系统是64位系统,下载的Mysql也是64位,而visual sutido 2019创建的项目默认是32位的。这时就会报错:
刚开始完全没有思路怎么解决,后来才知道,其实只要把运行环境改成x64就行,即:
(以上办法是针对只在x64下运行,如果要想在win32或x86下运行,请跳转至步骤6的位置)此时运行代码,依然会报错:缺少libmysql.dll
解决办法:设置项目属性
步骤1:打开项目属性
步骤2:将MySQL Server下的include文件路径添加至【配置属性——C/C++——常规——附加包含目录】
步骤3:将MySQL Server下的lib文件路径添加至【配置属性——链接器——常规——附加包含目录】
步骤4:在【配置属性——链接器——输入——附件依赖项】中添加libmysql.lib
步骤5:把MySQL Server 8.0\lib下的libmysql.dll文件拷贝至C:\Windows\System32中。重启。
(这是我的libmysql.dll文件的路径:C:\Program Files\MySQL\MySQL Server 8.0\lib)
步骤6:
针对Mysql版本是64位,但是想在x86或win32下开发Mysql的解决办法。
步骤2-4不变以外,针对步骤5变化。
首先下载32位的libmysql.dll文件和libmysql.lib文件。将32位的libmysql.dll文件保存至C:\Windows\SysWOW64中。将32位的libmysql.lib文件与原文件进行替换。原文件夹(MySQL Server 8.0\lib)下面64位的libmysql.dll文件可以不用管。
下载地址:
libmysql.dll与libmysql.lib 32位与64位下载
至此环境上配置完毕
代码:
#include <iostream>
#include "C:\Program Files\MySQL\MySQL Server 8.0\include\mysql.h"
//mysql.h文件路径会根据自己的情况发送改变,注意
using namespace std;
void main()
{
MYSQL m_sql;
mysql_init(&m_sql);
if (!mysql_real_connect(&m_sql, "localhost", "root", "1111", "mysql_test", 3306, NULL, 0))
{
cout << "fail" << endl;
}
//修改数据
char update[200] = "UPDATE control_message SET m_start=5 WHERE message_id=0;";
mysql_query(&m_sql, update);
//插入数据
char insert[200] = "insert into laser_message(message_id,m_start,m_info) values(0,0,"ABC");";
mysql_query(&m_sql, insert);
//读取
char select[200] = "select * from laser_message";
//各种语言字符集,根据需求设定
//mysql_query(&m_sql, "set names utf8");
//mysql_query(&m_sql, "set names gbk");
//mysql_query(&m_sql, "set names sjis");
mysql_query(&m_sql, select);
MYSQL_RES* result;
result = mysql_store_result(&m_sql);
//打印列表名
MYSQL_FIELD *fields;
fields = mysql_fetch_fields(result); //返回所有列
auto num = mysql_num_fields(result);
for (auto j = 0; j<num; j++)
{
cout << fields[j].name << " ";
}
cout << endl;
//打印列表值
MYSQL_ROW row;
unsigned int i, num_c;
num_c = mysql_num_fields(result);
while (row = mysql_fetch_row(result))
{
for (i = 0; i < num_c; i++)
{
cout << row[i] << " ";
}
cout << endl;
}
mysql_free_result(result);
}
注意:数据库的读写存在编码转换的问题,不然会乱码,如果可以尽量用英文来设计数据库,这样可以有效避免这个问题。