OceanBase學習之路10|C 相關 API 介紹

老樹樁12發表於2023-01-16

本文主要介紹常用的 C API 函式和示例。

C API 函式概覽

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

有關各介面詳細資訊,請參見官網檔案 《OceanBase Connector/C》 下的   章節。

名稱 描述
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();


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026075/viewspace-2932343/,如需轉載,請註明出處,否則將追究法律責任。

相關文章