Conéctese a LindormTable desde una aplicación en C o C++ mediante el controlador Open Database Connectivity (ODBC) para MySQL.
Requisitos previos
Antes de empezar, asegúrese de cumplir con lo siguiente:
La compatibilidad con MySQL habilitada en su instancia de Lindorm. 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. Consulte Configurar listas de permitidos.
Configuración del controlador
Paso 1: Instalar el controlador ODBC de MySQL
Descargue e instale el controlador ODBC para MySQL desde el sitio web oficial de MySQL.
Paso 2: Instalar unixODBC
Instale unixODBC en Linux:
yum install unixODBC-devel
Paso 3: Configurar el controlador en odbcinst.ini
Agregue la siguiente entrada a su archivo odbcinst.ini.
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc8a.so
Setup = /usr/lib/libmyodbc8w.so
Driver64 = /usr/lib64/libmyodbc8a.so
Setup64 = /usr/lib64/libmyodbc8w.so
FileUsage = 1
|
Parámetro |
Descripción |
|
|
Etiqueta de esta entrada del controlador. Establezca un valor personalizado. |
|
|
Ruta de la biblioteca del controlador ODBC de 32 bits. |
|
|
Ruta de la biblioteca del instalador del controlador ODBC de 32 bits. |
|
|
Ruta de la biblioteca del controlador ODBC de 64 bits. |
|
|
Ruta de la biblioteca del instalador del controlador ODBC de 64 bits. |
|
|
Valor fijo. No lo modifique. Valor: |
Paso 4: Conectarse a LindormTable en el código
Use SQLDriverConnect para establecer la conexión. El formato de la cadena de conexión es a continuación:
DRIVER={MySQL};SERVER=<endpoint>;PORT=33060;DATABASE=<database>;USER=<username>;PASSWORD=<password>
|
Parámetro |
Descripción |
|
|
Nombre del controlador configurado en |
|
|
Endpoint de LindormTable para MySQL. Consulte Consultar endpoints. |
|
|
Puerto para acceder a LindormTable mediante MySQL. Valor fijo: |
|
|
Base de datos a la que se conectará. De forma predeterminada, el cliente se conecta a una base de datos llamada |
|
|
Su nombre de usuario de LindormTable. Para restablecer su contraseña, consulte Manage users. |
|
|
Su contraseña de LindormTable. |
Elección del endpoint adecuado para SERVER:
Instancia de ECS (VPC): Use el LindormTable VPC endpoint for MySQL para obtener menor latencia y mayor seguridad.
Servidor local (Internet): Primero habilite el endpoint público en la consola de Lindorm. Vaya a Database Connections > Wide Table Engine y haga clic en Enable Public Endpoint en la pestaña Wide Table Engine. Después, use el LindormTable Internet endpoint for MySQL.
Paso 5: Ejecutar consultas
Una vez establecida la conexión, asigne un identificador de instrucción y ejecute SQL con SQLExecDirect. En el siguiente ejemplo se ejecuta show databases y se imprime cada fila del resultado:
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
printf("Connection established. \n");
// Perform the query.
SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
SQLExecDirect(stmt, (SQLCHAR*)"show databases", SQL_NTS);
// Obtain query results.
SQLCHAR result[50];
while (SQLFetch(stmt) == SQL_SUCCESS) {
SQLGetData(stmt, 1, SQL_C_CHAR, result, sizeof(result), NULL);
printf("database: %s\n", result);
}
// Release resources.
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
SQLDisconnect(dbc);
} else {
SQLCHAR sqlState[6];
SQLCHAR msg[SQL_MAX_MESSAGE_LENGTH];
SQLINTEGER nativeError;
SQLSMALLINT actualMsgLen;
SQLGetDiagRec(SQL_HANDLE_DBC, dbc, 1, sqlState, &nativeError, msg, sizeof(msg), &actualMsgLen);
printf("Connection failed: %s\n", msg);
}
// Release resources.
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 0;
Ejemplo completo
El siguiente programa inicializa el entorno ODBC, se conecta a LindormTable, consulta todas las bases de datos y libera todos los recursos.
Reemplace los valores de marcador de posición de la cadena de conexión con su endpoint, nombre de base de datos, nombre de usuario y contraseña reales.
#include <stdio.h>
#include <stdlib.h>
#include <sql.h>
#include <sqlext.h>
int main() {
// Define connection handles.
SQLHENV env;
SQLHDBC dbc;
SQLHSTMT stmt;
SQLRETURN ret;
// Initialize the ODBC environment.
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
// Allocate a connection handle and set the login timeout.
SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
SQLSetConnectAttr(dbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, SQL_IS_INTEGER);
// Connect to LindormTable.
// Replace the SERVER, DATABASE, USER, and PASSWORD values with your own.
ret = SQLDriverConnect(dbc, NULL, (SQLCHAR*)"DRIVER={MySQL};SERVER=ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com;PORT=33060;DATABASE=default;USER=user;PASSWORD=test", SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
printf("Connection established. \n");
// Run a query.
SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
SQLExecDirect(stmt, (SQLCHAR*)"show databases", SQL_NTS);
// Print each row.
SQLCHAR result[50];
while (SQLFetch(stmt) == SQL_SUCCESS) {
SQLGetData(stmt, 1, SQL_C_CHAR, result, sizeof(result), NULL);
printf("database: %s\n", result);
}
// Release statement resources.
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
SQLDisconnect(dbc);
} else {
SQLCHAR sqlState[6];
SQLCHAR msg[SQL_MAX_MESSAGE_LENGTH];
SQLINTEGER nativeError;
SQLSMALLINT actualMsgLen;
SQLGetDiagRec(SQL_HANDLE_DBC, dbc, 1, sqlState, &nativeError, msg, sizeof(msg), &actualMsgLen);
printf("Connection failed: %s\n", msg);
}
// Release connection and environment resources.
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 0;
}
Si su instancia solo tiene la base de datos predeterminada, la salida será a continuación:
Connection established.
database: default
database: information_schema