linux下c++使用mysql的简单流程

linux下c++使用mysql的简单流程,第1张

1.linux下部署mysql

这里引用一个老哥的博客,亲自试过,流程清晰,我就不做过多赘述了。

https://www.cnblogs.com/jj123/p/15740668.html

2.使用外网连接mysql

这里奉献一下我的navicat安装包,大家可以去下载一下

链接:https://pan.baidu.com/s/1G8x4pwgzGf1zI2xorRR9Rw 
提取码:s5pj 

3.测试是否可以连接到数据库

如果无法连接,可以打开3306端口

//打开防火墙
systemctl start firewalld

//开放指定端口
 firewall-cmd --zone=public --add-port=3306/tcp --permanent

//重新加载
firewall-cmd --reload

如果还是没有办法连接,可能服务器有两道防火墙,可以查看服务器的控制台,手动开放端口

4.连接成功后,用navicat连接数据库

创建test库 

 创建user_data表

 

5.全都搞定之后写一个c++例子验证一下

c++代码:这部分代码是接着之前protobuf的代码写的,如果编译不过,可以看一下上一篇文章

#include 
#include "/usr/local/mysql/include/mysql.h"
#include "../proto/src/User.pb.h"

MYSQL g_mysql;

int main(int argc, char** argv)
{
    User user1;
    user1.set_id(100);
    user1.set_nickname("窑下村吴彦祖");
    std::string str = "";
    user1.SerializeToString(&str);
    
    User user2;
    user2.ParseFromString(str);
    std::cout << user2.id() << " " << user2.nickname() << std::endl;
    
    std::string host = "127.0.0.1";
    std::string user = "root";
    std::string pwd = "123456";
    std::string db = "test";
    
    if (!mysql_init(&g_mysql)) {
        std::cout << "mysql_init err" << std::endl;
        return 0;
    }

    if (!mysql_real_connect(&g_mysql, host.c_str(), user.c_str(), pwd.c_str(), db.c_str(), 0, NULL, CLIENT_MULTI_STATEMENTS)) {
        std::cout << "mysql_real_connect err" << std::endl;
        return 0;
    }
    //设置超时时间
    int value = 2;
    mysql_options(&g_mysql, MYSQL_OPT_READ_TIMEOUT, &value);
    mysql_options(&g_mysql, MYSQL_SET_CHARSET_NAME, "utf8");


    //insert 
    char sql[128];
    snprintf(sql, sizeof(sql), "insert into user_data(user_id, user_data) value (%d, \'%s\');", user2.id(), str.c_str());
    if (mysql_real_query(&g_mysql,sql,strlen(sql)) != 0) {
        std::cout << "sql err! sql=" << sql << std::endl;
      //  return false;
    }

    //select
    char sql2[] = "select * from user_data;";
    if (mysql_real_query(&g_mysql,sql2,strlen(sql2)) != 0) {
        std::cout << "sql err! sql=" << sql2 << std::endl;
        return false;
    }
    User user3;
    auto res = mysql_store_result(&g_mysql);
    auto num = mysql_num_rows(res);
    for (int i = 0; i < num; i++) {
        auto row = mysql_fetch_row(res);
        std::cout << "user_id = " << row[0] << " user_data = " << row[1] << std::endl;
        user3.ParseFromString(row[1]);   
    }
    std::cout << "user3.id() = " << user3.id() <<"user3.nick_name() = " << user3.nickname() << std::endl;
    return 0;
}

Makefile部分:

cc=g++

cc_flags=-std=c++11 \
	 -I/usr/local/mysql/include \


ln_flags=-L/usr/local/lib -lprotobuf \
	 -L/usr/local/mysql/lib -lmysqlclient \
	 -lpthread \
	 -lm \
	 -ldl \

obj=main.o \
    ../proto/src/User.pb.o \
    
target=process

$(target) : $(obj)
	$(cc) $(ln_flags) $(obj) -o $(target)

%.o : %.cpp
	$(cc) $(cc_flags) -c $< -o $@

%.o: %.cc
	$(cc) $(cc_flags) -c $< -o $@

clean:
	rm -f $(obj) $(target)

run.sh部分

ulimit -c 100000
export LD_LIBRARY_PATH=/usr/local/lib/:/usr/local/mysql/lib:
./process

执行make命令

用sh run.sh运行一下吧

 

6.小结

数据库对于一个后端开发来说非常重要,可以多花一些心思研究一下数据库。

我最早安装部署的时候,走了不少弯路,浪费了一些时间,其实这些工作主要都是运维工程师去做的,并不需要程序员过度关心,所以想写一篇文章减少初学者走的弯路。

代码上还有很多不足之处,并没有花太多心思去修改,主要是想把linux下用c++ *** 作mysql数据库的关键流程描述清楚,希望能给同学们带来一点帮助。

 

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/674652.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存