Este tema describe cómo usar la API de C de MySQL para conectarse a LindormTable y ejecutar operaciones SQL desde una aplicación en C o C++.
Requisitos previos
Antes de empezar, compruebe que cuenta con lo siguiente:
La compatibilidad con MySQL habilitada en su instancia de Lindorm. Para más información, consulte Habilitar la función de compatibilidad con MySQL.
La dirección IP de su cliente agregada a la lista de permitidos de la instancia de Lindorm. Para más información, consulte Configurar una lista de permitidos.
Conexión a LindormTable mediante la API de C de MySQL
Paso 1: Instalar la biblioteca de la API de C de MySQL
Instale el paquete mysql-devel, que proporciona los encabezados de la API de C de MySQL (incluido mysql/mysql.h) y las bibliotecas de cliente. A continuación se muestra un ejemplo con CentOS:
yum install mysql-devel
Una vez finalizada la instalación, el archivo de encabezado se ubica en /usr/include/mysql/mysql.h y la biblioteca de cliente es libmysqlclient. Utilice #include "mysql/mysql.h" en su archivo fuente para incluirla.
Paso 2: Configurar los parámetros de conexión
Defina los parámetros de conexión en su archivo fuente de 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 continuación se describe cada parámetro:
|
Parámetro |
Descripción |
|
|
El endpoint de LindormTable para MySQL. Para más información sobre cómo obtenerlo, consulte View endpoints. Utilice el endpoint de VPC cuando su aplicación se ejecute en una instancia de ECS, o bien el endpoint de Internet si la conexión se establece a través de una red pública. |
|
|
El nombre de usuario de LindormTable. Si olvida la contraseña, restablézcala en el sistema de gestión del clúster. Para más información, consulte Manage users. |
|
|
La contraseña de LindormTable. |
|
|
La base de datos a la que se conectará. El valor predeterminado es |
|
|
El puerto del protocolo MySQL para LindormTable. Su valor fijo es |
Elija el endpoint adecuado según su despliegue:
Instancia de ECS (recomendado): Utilice una conexión de nube privada virtual (VPC) para obtener menor latencia y mayor seguridad. Establezca
lindorm_addrcon la dirección de VPC compatible con MySQL.Aplicación local: Habilite primero el acceso al endpoint público. En la consola, vaya a Database Connections > Wide Table Engine y haga clic en Enable Public Endpoint. Establezca
lindorm_addrcon la dirección de Internet compatible con MySQL.
Paso 3: Crear una conexión y ejecutar SQL
Llame a mysql_real_connect() para establecer la conexión. Después, utilice la sintaxis SQL de tabla ancha para ejecutar las operaciones. A continuación se muestra un ejemplo que se conecta a LindormTable y crea una tabla:
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);
Paso 4: Compilar y ejecutar
Utilice mysql_config para proporcionar los indicadores correctos al compilador y al enlazador:
gcc -o a.out $(mysql_config --cflags) demo.c $(mysql_config --libs)
./a.out
|
Indicador |
Efecto |
|
|
Agrega la ruta de inclusión para que el compilador localice |
|
|
Enlaza con |
Sugerencia: Si obtiene errores de enlazador comoundefined reference to 'mysql_init'u otros similares, compruebe que$(mysql_config --libs)aparezca después de su archivo fuente en el comando. GCC resuelve los símbolos de izquierda a derecha.
Ejemplo completo
A continuación se muestra un código con las cuatro operaciones: conectarse, crear una tabla, insertar datos y consultar datos.
#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;
}
Salida esperada:
conect lindorm successfully
create table successfully
insert data successfully
name is 3 , age is wangwu
LindormTable utilizaupsert intoen lugar del estándarINSERT INTOpara escribir filas. Esta es la sintaxis SQL de tabla ancha específica de LindormTable.
Pasos siguientes
View endpoints: obtenga el endpoint de VPC o de Internet de su instancia.
Manage users: restablezca contraseñas o gestione el acceso.