C++:连接MySQL数据库(一)

1、MySQL提供的连接相关API
  • C和C++都提供了访问MySQL的API接口,连接过程也较为简单
  • 主要是下面两个函数
    • mysql_init:初始化创建的MySQL结构体,如果传入空则自动分配一个。失败返回NULL,成功返回一个指针,它是线程不安全的,其内部也会自动调用mysql_library_init函数
    • mysql_library_init函数:主要在多线程情况下使用,用于初始化服务连接,它实际上是一个宏函数(mysql_server_init)
    • mysql_library_end函数:主要在多线程情况下使用,用于关闭服务连接,实际上是一个宏函数(mysql_server_end)
    • mysql_close函数:用于释放MySQL结构体对象
cpp 复制代码
MYSQL* mysql_init(MYSQL *mysql);

mysql_library_init(int argc, char **argv, char **groups);

mysql_library_end();

void  mysql_close(MYSQL *sock);
  • mysql_real_connect函数:用于与MySQL数据库建立连接

    • mysql:初始化的结构体对象
    • host、user、passwd、db、port:分别对应MySQL服务器地址、用户名、密码、库名、端口
    • unix_socket:这个是Linux网络编程里面的知识表示,Socket套接字,可以传入0让连接函数自己创建
    • clientflag:连接可以做一些设置,是否希望此次建立的连接是否需要同一些其他特性需求,例如:允许多查询、返回表信息等等,默认传0
    • 返回值:成功返回MySQL结构体指针,失败返回NULL
    cpp 复制代码
    MySQL* mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, 
                       							unsigned int port, const char *unix_socket, unsigned long clientflag);
  • mysql_options函数:用于设置一些连接超时、断开重连等

    • MYSQL_OPT_CONNECT_TIMEOUT:连接超时设置,可以设置连接多久连不上就超时,减少阻塞事件
    • MYSQL_OPT_READ_TIMEOUT:设置读(查询)超时
    • MYSQL_OPT_RECONNECT:断开重连
      • 成功返回0,失败返回非0
    cpp 复制代码
    int mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg);
2、C++连接MySQL
  • 在使用Linux环境下如果是用Makefile编译需要加入一些编译参数-lmysqlclient -I/usr/local/mysql
cpp 复制代码
#include <iostream>
#include <mysql/mysql.h>
using namespace std;

int main(int argc, char *argv[])
{
    MYSQL mysql;
    // 1. 初始化mysql结构体并且初始化服务连接环境
    mysql_init(&mysql);
    const char *host = "127.0.0.1";
    const char *user = "root";
    const char *password = "123456";
    const char *db = "mysql";
    int timeout = 3;
    // 2. 连接超时时长设置
    mysql_options(&mysql, MYSQL_OPT_CONNECT_TIMEOUT, &timeout);

    // 3. 断开重连设置
    int reconnect = 1;
    mysql_options(&mysql, MYSQL_OPT_RECONNECT, &reconnect);

    // 4. MySQL连接建立
    if(!mysql_real_connect(&mysql, host, user, password, db, 3306, 0, 0)){
        std::cout << "mysql connect failed!" << mysql_error(&mysql) << std::endl;
    }
    else{
        std::cout << "mysql connect " << host << " success!" << std::endl;
    }
    cout << "Hello World!\n" << endl;

    // 5. 释放mysql结构体
    mysql_close(&mysql);
    return 0;
}
相关推荐
life码农13 分钟前
Linux截取Nginx指定时间段日志的三种方法(grep/awk/sed)
linux·nginx
Dawn-bit31 分钟前
Linux网络进阶:TCP三次握手和四次挥手与TCP连接状态
linux·服务器·网络·tcp/ip·云计算·智能路由器
小小龙学IT1 小时前
FlatBuffers 深度解析:Google 开源零拷贝序列化库完全指南
c++·开源
NJCloud1 小时前
MooseFS 分布式存储部署与高可用架构实践
linux·运维·分布式·架构
mounter6251 小时前
将 RDMA 引入容器:Soft-RoCE (RXE) 网络命名空间支持深度解析
linux·linux kernel·kernel·rdma·net namespace
奈斯先生Vector2 小时前
从 127.0.0.1:3080 到插件运行时:DeepSeek Harness 远程开发与版本治理实战
linux·运维·人工智能·ubuntu·aigc
wuminyu2 小时前
JDK21中虚拟线程和FFM协同实现高并发源码剖析
java·linux·c语言·jvm·c++
SWAGGY..2 小时前
【C++进阶】:(1)继承机制详解
java·jvm·c++
Android系统攻城狮2 小时前
Linux PipeWire深度解析之pw_stream_new调用流程与实战(七十八)
linux·运维·服务器·音频进阶·pipewire音频实战进阶
听取WA声一片(无恶意)3 小时前
CSP-J/CSP-S 深度优先搜索(DFS)完全讲义
c++·算法·深度优先