Todos os produtos
Search
Central de documentação

Lindorm:Use C API to develop applications

Última atualização: Jun 28, 2026

Este tópico descreve como usar a API C do MySQL para conectar-se ao LindormTable e executar operações SQL em uma aplicação C ou C++.

Pré-requisitos

Antes de começar, verifique se:

Conecte-se ao LindormTable usando a API C do MySQL

Etapa 1: Instale a biblioteca da API C do MySQL

Instale o pacote mysql-devel, que fornece os cabeçalhos da API C do MySQL (incluindo mysql/mysql.h) e as bibliotecas cliente. O exemplo a seguir usa CentOS:

yum install mysql-devel

Após a instalação, o arquivo de cabeçalho fica em /usr/include/mysql/mysql.h e a biblioteca cliente é a libmysqlclient. Use #include "mysql/mysql.h" no arquivo de código-fonte para incluí-lo.

Etapa 2: Configure os parâmetros de conexão

Defina os parâmetros de conexão no arquivo de código-fonte C:

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;

A tabela a seguir descreve cada parâmetro:

Parâmetro

Descrição

lindorm_addr

Endpoint do LindormTable para MySQL. Para obtê-lo, consulte Visualize endpoints. Use o endpoint de VPC quando a aplicação for executada em uma instância ECS ou o endpoint de Internet para conexões via rede pública.

lindorm_user

Nome de usuário do LindormTable. Se esquecer a senha, redefina-a no sistema de gerenciamento do cluster. Para mais informações, consulte Gerencie usuários.

lindorm_password

Senha do LindormTable.

database

Banco de dados de destino da conexão. O valor padrão é default.

lindorm_mysql_port

Porta do protocolo MySQL para o LindormTable. Valor fixo: 33060.

Importante

Escolha o endpoint adequado conforme o ambiente de implantação:

  • Instância ECS (recomendado): Use uma conexão de Virtual Private Cloud (VPC) para garantir menor latência e maior segurança. Defina lindorm_addr com o endereço VPC compatível com MySQL.

  • Aplicação local: Ative primeiro o acesso por endpoint público. No console, acesse Database Connections > Wide Table Engine e clique em Enable Public Endpoint. Em seguida, defina lindorm_addr com o endereço de Internet compatível com MySQL.

Etapa 3: Crie uma conexão e execute SQL

Chame mysql_real_connect() para estabelecer a conexão e use a sintaxe SQL de tabela ampla para executar operações. O exemplo a seguir conecta-se ao LindormTable e cria uma tabela:

MYSQL      conn;
int        res;

mysql_init(&conn);

// Create a connection
if (!mysql_real_connect(
        &conn,               // Connection handle
        lindorm_addr,        // Host: LindormTable endpoint
        lindorm_user,        // Username
        lindorm_password,    // Password
        database,            // Default database
        lindorm_mysql_port,  // Port: 33060
        NULL,                // Unix socket (not used)
        0                    // Client flags (none)
)) {
    fprintf(stderr, "Failed to connect: %s\n", mysql_error(&conn));
    mysql_close(&conn);
    exit(1);
} else {
    printf("conect lindorm successfully\n");
}

// Create a table
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("Table created successfully\n");
} else {
    fprintf(stderr, "Create table error: %s\n", mysql_error(&conn));
    mysql_close(&conn);
    exit(1);
}

// ... run additional queries, then release resources
mysql_free_result(result);
mysql_close(&conn);

Etapa 4: Compile e execute

Use mysql_config para fornecer as flags corretas de compilação e vinculação:

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

Flag

Efeito

--cflags

Adiciona o caminho de inclusão para que o compilador localize mysql/mysql.h.

--libs

Vincula a execução à biblioteca libmysqlclient.

Dica: Se ocorrerem erros de vinculação como undefined reference to 'mysql_init' ou similares, certifique-se de que $(mysql_config --libs) apareça após o arquivo de código-fonte no comando. O GCC resolve símbolos da esquerda para a direita.

Exemplo completo

O código a seguir demonstra as quatro operações: conexão, criação de tabela, inserção de dados e consulta.

#include <stdio.h>
#include "mysql/mysql.h"

int main() {
    MYSQL      conn;
    int        res;
    MYSQL_RES *result;
    MYSQL_ROW  row;

    mysql_init(&conn);

    // Connection configuration
    char lindorm_addr[]     = "ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com"; // LindormTable endpoint for MySQL
    char lindorm_user[]     = "user";    // LindormTable username
    char lindorm_password[] = "test";    // LindormTable password
    char database[]         = "default"; // Database to connect to
    int  lindorm_mysql_port = 33060;     // MySQL protocol port (fixed at 33060)

    // Create a connection
    if (!mysql_real_connect(
            &conn,               // Connection handle
            lindorm_addr,        // Host
            lindorm_user,        // Username
            lindorm_password,    // Password
            database,            // Default database
            lindorm_mysql_port,  // Port
            NULL,                // Unix socket (not used)
            0                    // Client flags (none)
    )) {
        fprintf(stderr, "Failed to connect: %s\n", mysql_error(&conn));
        mysql_close(&conn);
        exit(1);
    } else {
        printf("conect lindorm successfully\n");
    }

    // Create a table
    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 {
        fprintf(stderr, "create table Error: %s\n", mysql_error(&conn));
        mysql_close(&conn);
        exit(1);
    }

    // Insert data using upsert syntax
    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 {
        fprintf(stderr, "insert data Error: %s\n", mysql_error(&conn));
        mysql_close(&conn);
        exit(1);
    }

    // Query data
    char select_query[] = "select * from user_test";
    if (mysql_query(&conn, select_query) != 0) {
        fprintf(stderr, "select Error: %s\n", mysql_error(&conn));
        mysql_close(&conn);
        exit(1);
    }

    result = mysql_store_result(&conn);
    if (result == NULL) {
        fprintf(stderr, "store result Error: %s\n", mysql_error(&conn));
        mysql_close(&conn);
        exit(1);
    }

    while ((row = mysql_fetch_row(result)) != NULL) {
        printf("name is %s , ", row[0]);
        printf("age is %s\n", row[1]);
    }

    mysql_free_result(result);
    mysql_close(&conn);
    return 0;
}

Saída esperada:

conect lindorm successfully
create table successfully
insert data successfully
name is 3 , age is wangwu
O LindormTable usa upsert into em vez do padrão INSERT INTO para gravar linhas. Essa é a sintaxe SQL de tabela ampla específica do LindormTable.

Próximos passos