OceanBase学习之路10|C 相关 API 介绍

本文主要介绍常用的 C API 函数和示例。

C API 函数概览

当前版本 OceanBase Connector/C 所有可用的 C API 函数如下表所示。

有关各接口详细信息,请参见官网文档 《OceanBase Connector/C》 下的  C API 函数概览 章节。

名称 描述
my_init() 初始化 OceanBase 库的全局变量。
mysql_affected_rows() 返回上一次由  UPDATEDELETE 或  INSERT 语句进行更改、删除或插入的行数。
mysql_autocommit() 设置自动提交模式。
mysql_change_user() 在打开的连接上更改用户和数据库。
mysql_character_set_name() 返回当前连接的默认字符集名称。
mysql_client_find_plugin() 返回指向插件的指针。
mysql_client_register_plugin() 注册一个插件。
mysql_close() 关闭与服务器的连接。
mysql_commit() 提交事务。
mysql_connect() 连接服务器。此功能已弃用。
mysql_create_db() 创建数据库。此功能已弃用。
mysql_data_seek() 在结果集中查找任意行号。
mysql_debug() 使用给定的字符串执行  DBUG_PUSH
mysql_drop_db() 删除数据库。此功能已弃用。
mysql_dump_debug_info() 引发服务器将调试信息写入错误日志。
mysql_eof() 判断结果集的最后一行是否已经被读取。此功能已弃用。
mysql_errno() 返回最近调用的 API 函数的错误码。
mysql_error() 返回最近调用的 API 函数的错误信息。
mysql_escape_string() 转义字符串中的特殊字符,使其可以在 SQL 语句中使用。
mysql_fetch_field() 返回下一个表字段的类型。
mysql_fetch_field_direct() 返回指定字段编号的字段类型。
mysql_fetch_fields() 返回包含所有字段结构的数组。
mysql_fetch_lengths() 返回当前行中所有列的长度。
mysql_fetch_row() 获取结果集的下一行。
mysql_field_count() 返回最近查询结果的列数。
mysql_field_seek() 查找结果集行中的列。
mysql_field_tell() 最后一次调用  mysql_fetch_field() 的字段位置。
mysql_free_result() 释放结果集内存。
mysql_get_character_set_info() 返回关于默认字符集的信息。
mysql_get_client_info() 返回 OceanBase 客户端版本信息(字符串)。
mysql_get_client_version() 返回 OceanBase 客户端版本信息(整数型)。
mysql_get_host_info() 返回包括服务器主机名的相关连接信息。
mysql_get_proto_info() 返回连接所使用的协议版本。
mysql_get_server_info() 返回服务器版本号(字符串)。
mysql_get_server_version() 返回服务器版本号(整数型)。
mysql_get_ssl_cipher() 返回当前的 SSL 密码。
mysql_hex_string() 以十六进制格式编码字符串。
mysql_info() 返回最近执行语句的有关信息。
mysql_init() 获取或初始化一个连接结构。
mysql_insert_id() 返回上一条语句为  AUTO_INCREMENT 列生成的 ID 值。
mysql_kill() 杀死一个线程。此功能已弃用。
mysql_library_end() 结束使用 C API 库。
mysql_library_init() 初始化 C API 库。
mysql_list_dbs() 返回匹配正则表达式的数据库名称。
mysql_list_fields() 返回匹配正则表达式的字段名称。
mysql_list_processes() 返回当前服务器的线程列表。
mysql_list_tables() 返回匹配正则表达式的表名。
mysql_load_plugin() 加载插件。
mysql_load_plugin_v() 加载插件。
mysql_more_results() 检查是否存在更多的结果。
mysql_next_result() 在多结果执行中返回或启动下一个结果。
mysql_num_fields() 返回结果集中的列数。
mysql_num_rows() 返回结果集中的行数。
mysql_options() 在连接前设置选项。
mysql_options4() 在连接前设置选项。
mysql_ping() Ping 服务器。
mysql_plugin_options() 设置插件选项。
mysql_query() 执行 SQL 语句。
mysql_real_connect() 连接到服务器。
mysql_real_escape_string() 对语句的字符串中的特殊字符进行编码。
mysql_real_query() 执行语句。
mysql_refresh() 刷新或重置表和缓存。
mysql_reload() 重新加载授权表。此功能已弃用。
mysql_rollback() 回滚事务。
mysql_row_seek() 在查询结果集中查找任意行。
mysql_row_tell() 返回结果集行游标的当前位置。
mysql_select_db() 选择数据库。
mysql_server_end() 结束使用 C API 库。
mysql_server_init() 初始化 C API 库。
mysql_set_character_set() 设置当前连接默认字符集。
mysql_set_local_infile_default() 将  LOAD DATA LOCAL 句柄回调到默认值。
mysql_set_local_infile_handler() 安装指定应用程序的  LOAD DATA LOCAL 句柄回调。
mysql_set_server_option() 设置当前连接的选项。
mysql_shutdown() 关闭服务器。
mysql_sqlstate() 返回最近调用函数的  SQLSTATE 值。
mysql_ssl_set() 准备与服务器建立 SSL 连接。
mysql_stat() 返回服务器状态。
mysql_stmt_affected_rows() 返回使用上次准备的  UPDATEDELETE 或  INSERT 语句进行更改、删除或插入的行数。
mysql_stmt_attr_get() 获取 Prepared Statement 的属性值。
mysql_stmt_attr_set() 设置 Prepared Statement 属性值。
mysql_stmt_bind_param() 将应用程序数据缓冲器与 Prepared Statement 中的参数标记相关联。
mysql_stmt_bind_result() 将应用程序数据缓冲器与结果集中的列相关联。
mysql_stmt_close() 释放 Prepared Statement 所使用的内存。
mysql_stmt_data_seek() 在 Prepared Statement 的结果集中查找任意行号。
mysql_stmt_errno() 最近调用的 Prepared Statement API 函数的错误号。
mysql_stmt_error() 最近调用的 Prepared Statement API 函数的错误信息。
mysql_stmt_execute() 执行 Prepared Statement 。
mysql_stmt_fetch() 获取结果集的下一行并返回所有绑定列的数据。
mysql_stmt_fetch_column() 获取当前结果集行的一列。
mysql_stmt_field_count() 最近 Prepared Statement 执行结果的列数。
mysql_stmt_free_result() 释放分配给语句句柄的资源。
mysql_stmt_init() 为  STMT 结构分配和初始化内存。
mysql_stmt_insert_id() 由先前的 Prepared Statement 所生成的  AUTO_INCREMENT 列的 ID。
mysql_stmt_next_result() 在多结果 Prepared Statement 执行中返回或启动下一个结果。
mysql_stmt_num_rows() 缓冲语句结果集中的行数。
mysql_stmt_param_count() 返回 Prepared Statement 中的参数数量。
mysql_stmt_param_metadata() 将参数元数据作为结果集返回。
mysql_stmt_prepare() 准备执行语句。
mysql_stmt_reset() 在服务器端重置语句缓冲器。
mysql_stmt_result_metadata() 将 Prepared Statement 的元数据作为结果集返回。
mysql_stmt_row_seek() 在 Prepared Statement 结果集中寻找任意行。
mysql_stmt_row_tell() 返回 Prepared Statement 结果集行游标的当前位置。
mysql_stmt_send_long_data() 将长数据分块发送到服务器。
mysql_stmt_sqlstate() 返回最近调用的 Prepared Statement API 函数的  SQLSTATE 值。
mysql_stmt_store_result() 检索并存储整个结果集。
mysql_store_result() 检索并存储整个结果集。
mysql_thread_end() 结束使用线程句柄。
mysql_thread_id() 返回当前线程 ID。
mysql_thread_init() 初始化线程句柄。
mysql_thread_safe() 指示客户端库的编译是否为线程安全的。
mysql_use_result() 开始逐行检索结果集。
mysql_warning_count() 返回上一条语句的告警计数。

示例

使用基础接口连接数据库,并创建表和更改数据。

mysql_library_init(0, NULL, NULL);
MYSQL *mysql = mysql_init(NULL);
/* 使用 CLIENT_MULTI_STATEMENTS 选项连接服务器 */
if (mysql_real_connect (mysql, host_name, user_name, password,
    db_name, port_num, socket_name, CLIENT_MULTI_STATEMENTS) == NULL)
{
  printf("mysql_real_connect() failed\n");
  mysql_close(mysql);
  mysql_library_end();
  exit(1);
}
/*执行多条语句 */
status = mysql_query(mysql,
                     "DROP TABLE IF EXISTS tbl1;\
                      CREATE TABLE tbl1(id INT);\
                      INSERT INTO tbl1 VALUES(110);\
                      UPDATE tbl1 SET id=120 WHERE id=110;\
                      SELECT * FROM tbl1;\
                      DROP TABLE tbl1");
if (status)
{
  printf("Could not execute statement(s)");
  mysql_close(mysql);
  mysql_library_end();
  exit(0);
}
/* 处理每个语句的结果 */
do {
  /* 当前语句是否返回数据? */
  result = mysql_store_result(mysql);
  if (result)
  {
    /* 是的; 则处理行并释放结果集 */
    process_result_set(mysql, result);
    mysql_free_result(result);
  }
  else          /* 没有结果集或报错 */
  {
    if (mysql_field_count(mysql) == 0)
    {
      printf("%lld rows affected\n",
            mysql_affected_rows(mysql));
    }
    else  /* 发生报错 */
    {
      printf("Could not retrieve result set\n");
      break;
    }
  }
  /* 判断是否有更多结果? -1 表示否,大于 0 表示报错,等于 0 表示是(即继续循环)*/
  if ((status = mysql_next_result(mysql)) > 0)
    printf("Could not execute statement\n");
} while (status == 0);
mysql_close(mysql);
mysql_library_end();


请使用浏览器的分享功能分享到微信等