OceanBase學習之路5|C 應用程式連線 OceanBase 資料庫

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

OceanBase Connector/C 為基於 C 開發的應用程式提供與 OceanBase 資料庫的連線。本文主要介紹該連線方式的前提條件和操作步驟。

前提條件

  • 在安裝使用 OceanBase Connector/C 前請確保設定了基本的資料庫開發環境,要求如下:

    • GCC 版本為 3.4.6 及以上,推薦使用 4.8.5 版本。

    • CMake 版本為 2.8.12 及以上。

  • 請聯絡技術支援人員獲取 OceanBase Connector/C 安裝包即  libobclient

Linux 安裝

  1. 安裝  libobclient

    sudo rpm -ivh libobclient-xx.x86_64.rpm
  2. 安裝  obclient

    sudo rpm -ivh obclient-xx.x86_64.rpm

    說明

    由於  obclient 依賴於  libobclient,所以需要先安裝  libobclient

從原始碼編譯

OceanBase Connector/C 的 Github 倉庫提供最新開發版本的原始碼。

  1. 安裝依賴工具。

    sudo yum install -y git cmake gcc make openssl-devel ncurses-devel rpm-build  gcc-c++ bison bison-devel zlib-devel gnutls-devel libxml2-devel openssl-devel \
    libevent-devel libaio-devel
  2. 從 github 下載 obclient 和 libobclient(即 OceanBase Connector/C)原始碼,地址如下:

    • obclient

    • libobclient

  3. 執行編譯指令碼編譯原始碼,編譯該程式碼會下載子 Module 和 OceanBase Connector/C 的程式碼。

    sh build.sh   #編譯程式碼
  4. 打包  libobclient 的 RPM 安裝包(包含 so 和標頭檔案)。

    cd libmariadb/rpm   #進入 libobclient 的打包目錄
    sh libobclient-build.sh   #打包 libobclient 安裝包
  5. 打包  obclient 的 RPM 包。

    cd ../../rpm      #進入到 obclient 的打包目錄
    sh obclient-build.sh    #打包 obclient 安裝包
  6. 安裝  libobclient

    sudo rpm -ivh libobclient-xx.x86_64.rpm
  7. 安裝  obclient

    sudo rpm -ivh obclient-xx.x86_64.rpm

    說明

    由於  obclient 依賴於  libobclient,所以需要先安裝  libobclient

執行示例

完整的基礎執行示例如下:


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-2932337/,如需轉載,請註明出處,否則將追究法律責任。

相關文章