C++读写Mysql数据库

前言:

一直以来操作数据库我用的都是python,第一次使用C++来操作Mysql数据库,中间遇到了许多问题,特别是Mysql版本为64位,但想在x86或win32下开发Mysql的问题。把这些经验进行总结,希望可以帮到遇到同样问题的朋友。如果对您有帮助,您的三连是对我最大的鼓励,谢谢。

顺带一提:

python操作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);  
}

注意:数据库的读写存在编码转换的问题,不然会乱码,如果可以尽量用英文来设计数据库,这样可以有效避免这个问题。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幽默小书生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值