全部產品
Search
文件中心

Lindorm:基於C API的應用開發

更新時間:Jul 06, 2024

本文介紹基於C或C++語言,通過MySQL C-API進行應用開發的方法。

前提條件

操作步驟

  1. 安裝MySQL C-API相關依賴。以CentOS系統為例,執行以下命令:

  2. yum install mysql-devel
  3. 配置串連參數。

    char lindorm_addr[] = "ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com";
    char lindorm_user[] = "user";
    char lindorm_password[] = "test";
    char database[] = "default";
    int lindorm_mysql_port = 33060;

    參數說明

    參數

    說明

    lindorm_addr

    Lindorm寬表引擎的MySQL相容地址。如何擷取MySQL相容地址,請參見查看串連地址

    重要
    • 如果應用部署在ECS執行個體,建議您通過專用網路訪問Lindorm執行個體,可獲得更高的安全性和更低的網路延遲。

    • 如果應用部署在本地,在通過公網串連Lindorm執行個體前,需在控制台開通公網地址。開通方式:在控制台選擇資料庫連接 > 寬表引擎,在寬表引擎頁簽單擊開通公網地址

    • 通過專用網路訪問Lindorm執行個體,lindorm_addr請填寫MySQL相容地址對應的專用網路地址。通過公網訪問Lindorm執行個體,lindorm_addr請填寫MySQL相容地址對應的公網地址。

    lindorm_user

    如果您忘記使用者密碼,可以通過Lindorm寬表引擎的叢集管理系統修改密碼。具體操作,請參見修改使用者密碼

    lindorm_password

    database

    需要串連的資料庫名稱。預設串連default資料庫。

    lindorm_mysql_port

    Lindorm寬表引擎MySQL協議的連接埠,固定為33060。

  4. 建立串連,通過寬表SQL文法使用Lindorm寬表引擎。以建立表為例。

        // 建立串連
        if (!mysql_real_connect(&conn,lindorm_addr,lindorm_user,lindorm_password,database,lindorm_mysql_port,NULL,0)) {
            printf("Failed to connect to database: Error: %s\n",
                    mysql_error(&conn));
            exit(1);
        } else {
            printf("conect lindorm successfully\n");
        }
    
    
        // 建立表
        char create_table[] = "create table if not exists user_test(id int, name varchar,age int, primary key(id))";
        res = mysql_query(&conn, create_table);
        if (!res) {
            printf("create table successfully\n");
        } else {
            printf("create table Error: %s\n", mysql_error(&conn));
            exit(1);
        }
  5. 假設代碼儲存在demo.c檔案中,執行以下命令,編譯代碼。

    gcc -o a.out $(mysql_config --cflags) demo.c $(mysql_config --libs)
    ./a.out

完整樣本

完整範例程式碼如下:

#include <stdio.h>
#include "mysql/mysql.h"
int main(){
    MYSQL conn;
    int res;
    MYSQL_RES * result;
    MYSQL_ROW row;
    mysql_init(&conn);

    // 串連配置
    char lindorm_addr[] = "ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com"; //Lindorm寬表引擎的MySQL相容地址
    char lindorm_user[] = "user"; //Lindorm寬表引擎的使用者名稱
    char lindorm_password[] = "test"; //Lindorm寬表引擎的密碼
    char database[] = "default"; //需要串連的資料庫名稱
    int lindorm_mysql_port = 33060; //Lindorm寬表引擎MySQL協議的連接埠,固定為33060

    // 建立串連
    if (!mysql_real_connect(&conn,lindorm_addr,lindorm_user,lindorm_password,database,lindorm_mysql_port,NULL,0)) {
        printf("Failed to connect to database: Error: %s\n",
                mysql_error(&conn));
        exit(1);
    } else {
        printf("conect lindorm successfully\n");
    }


    // 建立表
    char create_table[] = "create table if not exists user_test(id int, name varchar,age int, primary key(id))";
    res = mysql_query(&conn, create_table);
    if (!res) {
        printf("create table successfully\n");
    } else {
        printf("create table Error: %s\n", mysql_error(&conn));
        exit(1);
    }

    // 插入資料
    char insert_data[] = "upsert into user_test(id,name,age) values(3,'wangwu',23)";
    res = mysql_query(&conn, insert_data);
    if (!res) {
        printf("insert data successfully\n");
    } else {
        printf("insert data Error: %s\n", mysql_error(&conn));
        exit(1);
    }

    // 查詢資料
    char select_query[] = "select * from user_test";
    if (mysql_query(&conn, select_query) != 0) {
        printf("select Error: %s\n", mysql_error(&conn));
        exit(1);
    } else {
        if ((result = mysql_store_result(&conn)) == NULL) {
            printf("store result Error: %s\n", mysql_error(&conn));
            exit(1);
        }
        else {
            while ((row = mysql_fetch_row(result)) != NULL) {
                printf("name is %s , ", row[0]);
                printf("age is %s\n", row[1]);
            }
        }
    }

    return 0;
}

執行成功後將返回如下結果:

conect lindorm successfully
create table successfully
insert data successfully
name is 3 , age is wangwu