个人知识库 个人知识库
首页
关于
  • C语言
  • CPlusPlus
  • Linux
  • PHP
  • Nginx
  • MySQL
  • Redis
  • Docker
  • Kubernetes
  • SRS
阅读
常用工具
  • 分类
  • 标签
  • 归档
GitHub

Agnes001

坚持是一件很伟大的事业
首页
关于
  • C语言
  • CPlusPlus
  • Linux
  • PHP
  • Nginx
  • MySQL
  • Redis
  • Docker
  • Kubernetes
  • SRS
阅读
常用工具
  • 分类
  • 标签
  • 归档
GitHub
  • Nginx

  • Qt

  • centos

  • MySQL

    • 常量命令
    • C++操作mysql
      • 主从同步
    • Redis

    • Docker

    • Kubernets

    • SRS

    • 应用框架
    • MySQL
    Agnes001
    2021-08-30

    C++操作mysql

    MySQL C API Developer Guide

    # 1. mysql_init()

    MYSQL *
    mysql_init(MYSQL *mysql)
    

    # 描述

    分配或初始化一个MYSQL适合于的对象 mysql_real_connect() 。如果 mysql是NULL指针,则函数分配、初始化并返回一个新对象。否则,初始化对象并返回对象的地址。如果 mysql_init() 分配了一个新对象,它会在mysql_close() 调用关闭连接时被释放 。

    在非多线程环境中, 根据需要自动mysql_init() 调用 mysql_library_init() 。但是, mysql_library_init() 在多线程环境中不是线程安全的,因此mysql_init() . 在调用之前mysql_init() ,要么mysql_library_init() 在产生任何线程之前调用,要么使用互斥锁来保护 mysql_library_init() 调用。这应该在任何其他客户端库调用之前完成。

    # 返回值

    一个初始化的MYSQL*处理程序。 NULL如果没有足够的内存来分配新对象。

    # 错误

    如果内存不足,NULL则返回。

    # 2. mysql_options()

    int
    mysql_options(MYSQL *mysql,
                  enum mysql_option option,
                  const void *arg)
    

    # 描述

    该option参数是你想要设置的选项; 该arg参数是选项的值。如果选项是整数,则指定一个指向整数值的指针作为arg 参数。

    下面的列表描述了可能的选项、它们的效果以及如何arg使用每个选项。对于指示arg未使用的选项描述 ,其值无关紧要;传0是惯例。

    • MYSQL_INIT_COMMAND(参数类型: char *)

      连接到 MySQL 服务器时要执行的 SQL 语句。如果发生重新连接,则自动重新执行。

    • MYSQL_OPT_BIND(说法:char *)

      连接到服务器的网络接口。当客户端主机有多个网络接口时使用。参数是主机名或 IP 地址(指定为字符串)。

    • MYSQL_OPT_CONNECT_TIMEOUT(参数类型:unsigned int *)

      以秒为单位的连接超时。

    • MYSQL_OPT_MAX_ALLOWED_PACKET(说法: unsigned long *)

      此选项设置客户端/服务器通信缓冲区的客户端最大大小。如果 mysql参数是 non- NULL,则调用设置该会话的选项值。如果mysql是 NULL,则调用为所有未指定会话特定值的后续会话全局设置选项值。

      因为可以设置会话或全局最大缓冲区大小,取决于 mysql参数是 non-NULL还是NULL, mysql_get_option() 类似地根据其mysql参数返回会话或全局值。

    • MYSQL_OPT_NET_BUFFER_LENGTH(说法: unsigned long *)

      此选项设置 TCP/IP 和套接字通信的客户端缓冲区大小。

    • MYSQL_OPT_PROTOCOL(参数类型: unsigned int *)

      用于连接的传输协议。指定中mysql_protocol_type 定义的枚举值之一mysql.h。

    • MYSQL_OPT_READ_TIMEOUT(参数类型: unsigned int *)

      每次尝试从服务器读取的超时时间(以秒为单位)。必要时会重试,因此总有效超时值是选项值的三倍。您可以设置该值,以便在 TCP/IPClose_Wait_Timeout值 10 分钟之前检测到丢失的连接 。

    • MYSQL_OPT_RECONNECT(参数类型: bool *)

      如果发现连接已丢失,则启用或禁用与服务器的自动重新连接。重新连接默认关闭;此选项提供了一种显式设置重新连接行为的方法。请参见 第 3.6.7 节,“自动重新连接控制” 。

    • MYSQL_OPT_RETRY_COUNT(参数类型: unsigned int *)

      在连接到服务器或与其通信时中断的 I/O 相关系统调用的重试计数。如果未指定此选项,则默认值为 1(如果初始调用中断 2 次,则重试 1 次)。

      此选项只能由链接到使用 NDB Cluster 支持编译的 C 客户端库的客户端使用。

    • MYSQL_OPT_WRITE_TIMEOUT(参数类型: unsigned int *)

      每次尝试写入服务器的超时时间(以秒为单位)。如有必要,会重试,因此总有效超时值是选项值的两倍。

    # 返回值

    成功为零。如果指定未知选项,则非零。

    # 3. mysql_real_connect()

    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 client_flag)
    

    # 描述

    指定参数如下:

    • 对于第一个参数,指定现有MYSQL结构的地址 。在调用之前 mysql_real_connect() ,调用 mysql_init() 初始化MYSQL结构。
    • host可以是主机名或 IP 地址。
    • 该user参数包含用户的 MySQL 登录 ID。如果user是 NULL或空字符串 "",则假定为当前用户。在 Unix 下,这是当前登录名。在 Windows ODBC 下,必须明确指定当前用户名。
    • 该passwd参数包含 的密码user。如果 passwd是NULL,则仅检查user表中具有空白(空)密码字段的用户条目是否匹配。这使数据库管理员可以设置 MySQL 权限系统,使用户根据是否指定密码获得不同的权限。
    • db是数据库名称。如果 db不是NULL,则连接将默认数据库设置为此值。
    • 如果port不为 0,则该值用作 TCP/IP 连接的端口号。请注意, host参数决定了连接的类型。
    • 如果unix_socket不是 NULL,则字符串指定要使用的套接字或命名管道。请注意, host参数决定了连接的类型。
    • client_flag通常为 0

    # 返回值

    一个MYSQL*连接处理程序,如果连接成功,NULL如果连接是不成功的。对于成功连接,返回值与第一个参数的值相同。

    # 4. mysql_error()

    const char *
    mysql_error(MYSQL *mysql)
    

    # 描述

    对于由 指定的连接mysql, mysql_error() 返回一个以空字符结尾的字符串,其中包含最近调用失败的 API 函数的错误消息。如果函数没有失败,则返回值 mysql_error() 可能是前一个错误或空字符串表示没有错误。

    # 返回值

    描述错误的以空字符结尾的字符串。如果没有发生错误,则为空字符串。

    # 5. mysql_stat()

    const char *
    mysql_stat(MYSQL *mysql)
    

    # 描述

    返回包含类似于mysqladmin status 命令提供的信息的字符串。这包括以秒为单位的正常运行时间以及正在运行的线程、问题、重新加载和打开表的数量。

    # 返回值

    描述服务器状态的字符串。 NULL表示连接已经关闭。

    # 6. mysql_close()

    void
    mysql_close(MYSQL *mysql)
    

    # 描述

    关闭先前打开的连接。

    # 7. mysql_query()

    int
    mysql_query(MYSQL *mysql,
                const char *stmt_str)
    

    # 描述

    执行空终止字符串指向的 SQL 语句stmt_str。通常,字符串必须由单个 SQL 语句组成,没有终止分号 ( ;) 或\g. 如果启用了多语句执行,则字符串可以包含多个用分号分隔的语句。

    要确定语句是否返回结果集,请调用 mysql_field_count()。

    # 返回值

    成功为零。如果发生错误,则非零。

    # 8. mysql_store_result()

    MYSQL_RES *
    mysql_store_result(MYSQL *mysql)
    

    # 描述

    在调用mysql_query()或者mysql_real_query() 之后,须调用mysql_store_result()或者mysql_use_result() 对于那些成功检索了数据的每个查询(select,show,describe,explain,check table等)。 mysql_store_result()将查询的全部结果读取到客户端,分配1个MYSQL_RES结构,并将结果置于该结构中。

    调用mysql_num_rows()可以找出结果集中的行数。可以调用mysql_fetch_row()来获取结果集中的行,或调用mysql_row_seek()和mysql_row_tell()来获取或设置结果集中的当前行位置。

    在对结果集处理完成之后,也必须调用mysql_free_result()函数释放内存。

    要使用返回的结果集,需调用 mysql_field_count()。

    mysql_store_result() 将查询的整个结果读取到客户端,分配一个 MYSQL_RES结构,并将结果放入该结构中。

    mysql_store_result() 返回 NULL如果语句没有返回结果集(例如,如果它是一个 INSERT 语句),或发生错误,结果集的读取失败。

    如果没有返回行,则返回空结果集。(空结果集与作为返回值的空指针不同。)

    在调用 mysql_store_result() 并取回非空指针的结果后,您可以调用 mysql_num_rows() 以查明结果集中有多少行。

    你可以调用mysql_fetch_row() 从结果集读取行,或者 mysql_row_seek() 和 mysql_row_tell() 获取或设置结果集中的当前行位置。

    # 返回值

    指向带有MYSQL_RES结果的结果结构的指针。NULL如果语句没有返回结果集或发生错误。要确定是否发生错误,请检查是 mysql_error() 返回非空字符串、mysql_errno() 返回非零还是 mysql_field_count() 返回零。

    # 9. mysql_field_count()

    unsigned int
    mysql_field_count(MYSQL *mysql)
    

    # 描述

    此函数的正常使用是在 mysql_store_result()返回时 NULL(因此您没有结果集指针)。在这种情况下,您可以调用 mysql_field_count() 以确定是否 mysql_store_result() 应该产生非空结果。这使客户端程序能够在不知道查询是否是SELECT (或 类似SELECT )语句的情况下采取适当的操作。

    # 返回值

    一个无符号整数,表示结果集中的列数。

    # 10. mysql_affected_rows()

    uint64_t
    mysql_affected_rows(MYSQL *mysql)
    

    它返回改变,删除或插入的最后一条语句的行数,如果它是一个UPDATE, DELETE或 INSERT。对于 SELECT语句, mysql_affected_rows()像mysql_num_rows()

    if (mysql_query(mysql, sql.c_str()))
    {
        LOG4CPLUS_ERROR(_logger, "SQL: "<<sql);
        LOG4CPLUS_ERROR(_logger, "Query Error: "<<mysql_error(mysql));
    }
    else
    {
        result = mysql_store_result(mysql);
        if (result)  //执行的是select show等语句
        {
            mysql_free_result(result);
        }
        else  // resutl == null
        {
            if(mysql_field_count(mysql) == 0)  //代表执行的是update,insert,delete类的非查询语句
            {
                res = mysql_affected_rows(mysql);
            }
        }
    }
    

    # 11. mysql_fetch_row()

    MYSQL_ROW
    mysql_fetch_row(MYSQL_RES *result)
    

    检索结果集的下一行

    # 12. mysql_free_result()

    void
    mysql_free_result(MYSQL_RES *result)
    

    mysql_free_result()释放由mysql_store_result()、 mysql_use_result()、 mysql_list_dbs()等为结果集分配的内存 。处理完结果集后,您必须通过调用 来释放它使用的内存 mysql_free_result()。

    在释放结果集后不要尝试访问它。

    编辑此页
    #mysql #c_api
    常量命令
    主从同步

    ← 常量命令 主从同步 →

    Theme by Vdoing
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式