C++链接远程MySql,增删改查

最近参与了《VR祖码》的开发,开发团队用的是UE4引擎,C++作为开发语言,需要在服务器存储数据

然后就一直在研究C++链接MySql,虽然简单,但是里面的坑还是很多的,网上的例子也很多但是大多

都是好几年前的,还有的就IDE不同,要么就是链接的本地的数据库,导致代码无尽报错,

最后请教了高人,解决了问题,感谢提供帮助的河软李老师,赵老师
如果没有他们的帮助就没有这篇文章,转载请保留版权,这是对作者最起码的尊重,

本文出自2018年1月8号,
IDE:VisualStudio2017,
MySql版本:5.6,
服务器:ContOS,
开发环境:Windows
Connectors:6.1.11

这边是Connectors的链接,作者下载的是64位
https://dev.mysql.com/downloads/connector/c/
这里写图片描述

首先说明Connectors是连接器,用来和MySql做链接的

下载好之后就可以打开VS了
用VS创建项目并吧下载好的Connectors文件夹放到项目的根目录里名字可以随便起,

这里写图片描述

然后我们还需要配置项目
在VS里右键项目->属性

配置属性 -> C/C++ -> 常规 -> 附加包含目录 -> include文件夹
配置属性 -> C/C++ -> 所有选项 -> 附加包含目录 -> include文件夹
配置属性 -> 连接器 -> 常规 -> 附加库目录 -> lib文件夹
配置属性 -> 连接器 -> 输入 -> 输入添加libmysql.lib文件

.cpp代码案例

#include <windows.h>
#include "stdafx.h"
#include <mysql.h>
#include <string>
#include <iostream>

using namespace std;

#pragma comment(lib,"libmysql.lib")


int main()
{
    const char user[] = "root";
    const char pswd[] = "root";
    const char host[] = "11.11.111.111";
    const char table[] = "DB_NAME";
    unsigned int port = 3306;
    MYSQL myCont;
    MYSQL_RES *result;
    MYSQL_ROW sql_row;
    int res;
    mysql_init(&myCont);
if (mysql_real_connect(&myCont, host, user, pswd, table, port, NULL, 0))
    //if (mysql_real_connect(&myCont, host, user, pswd,0,0,NULL,0))
    {
        mysql_query(&myCont, "SET NAMES UTF8"); //设置编码格式
    //  mysql_select_db(&myCont, table);
        res = mysql_query(&myCont, "select * from level_1");//查询
        if (!res)
        {
            result = mysql_store_result(&myCont);
            cout << "结果集数量:" << mysql_num_rows(result) +1<< endl;
            if (result)
            {
                while (sql_row = mysql_fetch_row(result))//获取具体的数据
                {
                    cout << "ID:" << sql_row[1] << endl;
                    cout << "Name:" << sql_row[2] << endl;
                }
                if(!mysql_query(&myCont, "insert into level_1(Name,Count) values('DongGuoZheng',2)")){
                    cout << "插入成功" << endl;
                }
                else {
                    cout << "shibai" << endl;
                    cout << mysql_error(&myCont) << endl;
                }
            }
        }
        else
        {
            cout << "query sql failed!" << endl;
        }
    }
    else
    {
        cout << "connect failed!" << endl;
    }
    if (result != NULL)
        mysql_free_result(result);

    mysql_close(&myCont);
    system("pause");

    return 0;

}

然后这段代码片可能大家看不懂,其实对于初学者只要记住这几个就OK了

    MYSQL conn;

初始化链接操作
    mysql_init(&conn);
链接mysql
    mysql_real_connect(&conn,'127.0.0.1','root','qqqqqq','Frog_DB',3306,NULL,0);

    char * sql = "select * from level_1";
    mysql_query(&conn,sql);                             //执行sql语句

    MYSQL_RES * result = mysql_store_result(&conn);     //一个完整的结果集

    mysql_fetch_row(result);                            //从结果集合中鱼的下一行
    mysql_num_rows(result);                             //返回结果集合中行的数量

    mysql_error(&conn);                                 //返回最近被调用的MySQL函数的出错消息。
    msyql_errorno(&conn);

其中增删改都用mysql_query()函数即可,后面参数带入sql语句即可
只有查不一样,mysql_store_result()返回的是一个数据集合

运行程序:
这里写图片描述

如果执行报错如下图所示的错误
这里写图片描述
说明编译的exe执行文件没有libmysql.dll可以去执行
只需要把lib放到同目录即可

最后由于作者也是初学者,还有诸多地方需要指点,如有疏忽还望各位读者不吝赐教,

猜你喜欢

转载自blog.csdn.net/qq_36409711/article/details/79006744