全部产品
Search
文档中心

Lindorm:Menggunakan ODBC untuk mengembangkan aplikasi

更新时间:Jul 06, 2025

Topik ini menjelaskan cara menggunakan driver Open Database Connectivity (ODBC) untuk MySQL dalam mengembangkan aplikasi C atau C++.

Prasyarat

Prosedur

  1. Unduh dan instal driver ODBC untuk MySQL dari situs resmi MySQL.

  2. Instal komponen koneksi unixODBC. Perintah berikut menunjukkan contoh cara menginstal unixODBC di Linux:

    yum install unixODBC-devel
  3. Ubah dependensi MySQL dalam file konfigurasi odbcinst.ini.

    [MySQL]
    Description	= ODBC untuk MySQL
    Driver		= /usr/lib/libmyodbc8a.so
    Setup		= /usr/lib/libmyodbc8w.so
    Driver64	= /usr/lib64/libmyodbc8a.so
    Setup64		= /usr/lib64/libmyodbc8w.so
    FileUsage	= 1

    Tabel berikut menjelaskan parameter yang dapat dikonfigurasi dalam file tersebut.

    Parameter

    Deskripsi

    Description

    Deskripsi dependensi MySQL. Anda dapat menentukan deskripsi kustom.

    Driver

    Driver ODBC. Atur parameter ini ke jalur tempat driver ODBC disimpan.

    Setup

    Pemasang driver ODBC. Atur parameter ini ke jalur tempat pemasang driver ODBC disimpan.

    Driver64

    Driver ODBC 64-bit. Atur parameter ini ke jalur tempat driver ODBC 64-bit disimpan.

    Setup64

    Pemasang driver ODBC 64-bit. Atur parameter ini ke jalur tempat pemasang driver ODBC 64-bit disimpan.

    FileUsage

    Nilai default parameter ini adalah 1. Jangan ubah nilai ini.

  4. Konfigurasikan parameter koneksi.

    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);

    Parameter

    Parameter

    Deskripsi

    DRIVER

    Nama driver ODBC untuk MySQL. Atur parameter ini ke nama dependensi MySQL yang dikonfigurasi dalam file odbcinst.ini.

    SERVER

    LindormTable endpoint for MySQL. Untuk informasi lebih lanjut tentang cara mendapatkan titik akhir, lihat Melihat titik akhir.

    Penting
    • Jika aplikasi Anda diterapkan pada instance ECS, kami sarankan Anda menggunakan VPC untuk terhubung ke instance Lindorm guna memastikan keamanan yang lebih tinggi dan latensi jaringan yang lebih rendah.

    • Jika aplikasi Anda diterapkan pada server lokal dan perlu terhubung ke instance Lindorm melalui Internet, Anda dapat melakukan langkah-langkah berikut untuk mengaktifkan titik akhir Internet untuk instance tersebut di konsol Lindorm: Di panel navigasi sisi kiri, pilih Database Connections > Wide Table Engine. Pada tab Wide Table Engine, klik Enable Public Endpoint.

    • Jika Anda menggunakan VPC untuk mengakses instance Lindorm, tentukan LindormTable VPC endpoint for MySQL dalam nilai SERVER. Jika Anda menggunakan VPC untuk mengakses instance Lindorm, tentukan LindormTable Internet endpoint for MySQL dalam nilai SERVER.

    PORT

    Port yang digunakan untuk mengakses LindormTable menggunakan MySQL. Nilai parameter ini tetap 33060.

    DATABASE

    Nama basis data yang ingin Anda hubungkan. Secara default, klien Anda terhubung ke basis data bernama default.

    USER

    Jika Anda lupa kata sandi, Anda dapat mengubah kata sandi dalam sistem manajemen kluster LindormTable. Untuk informasi lebih lanjut, lihat Mengelola pengguna.

    PASSWORD

  5. Buat koneksi dan gunakan SQL LindormTable untuk melakukan operasi di LindormTable. Blok kode berikut menunjukkan contoh cara menggunakan SQL LindormTable untuk menanyakan semua basis data:

    if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
            printf("Koneksi berhasil dibuat. \n");
    
            // Lakukan query.
            SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
            SQLExecDirect(stmt, (SQLCHAR*)"show databases", SQL_NTS);
    
            // Dapatkan hasil query.
            SQLCHAR result[50];
            while (SQLFetch(stmt) == SQL_SUCCESS) {
                SQLGetData(stmt, 1, SQL_C_CHAR, result, sizeof(result), NULL);
                printf("basis data: %s\n", result);
            } 
            // Lepaskan sumber daya.
            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("Koneksi gagal: %s\n", msg);
        }
    
        // Lepaskan sumber daya.
        SQLFreeHandle(SQL_HANDLE_DBC, dbc);
        SQLFreeHandle(SQL_HANDLE_ENV, env);
    
        return 0;

Kode contoh

Kode berikut menunjukkan contoh lengkap cara terhubung dan menggunakan LindormTable dengan driver ODBC:

#include <stdio.h>
#include <stdlib.h>
#include <sql.h>
#include <sqlext.h>

int main() {
    // Tentukan informasi koneksi.
    SQLHENV env;
    SQLHDBC dbc;
    SQLHSTMT stmt;
    SQLRETURN ret;

    // Inisialisasi lingkungan.
    SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
    SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);

    // Buat koneksi.
    SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
    SQLSetConnectAttr(dbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, SQL_IS_INTEGER);
    // Setel lindorm_mysql_url ke titik akhir LindormTable untuk MySQL, database ke basis data yang ingin Anda hubungkan, lindorm_user ke nama pengguna yang digunakan untuk terhubung ke LindormTable, dan lindorm_password ke kata sandi yang digunakan untuk terhubung ke LindormTable. 
    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("Koneksi berhasil dibuat. \n");

        // Lakukan query.
        SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
        SQLExecDirect(stmt, (SQLCHAR*)"show databases", SQL_NTS);

        // Dapatkan hasil query.
        SQLCHAR result[50];
        while (SQLFetch(stmt) == SQL_SUCCESS) {
            SQLGetData(stmt, 1, SQL_C_CHAR, result, sizeof(result), NULL);
            printf("basis data: %s\n", result);
        } 
        // Lepaskan sumber daya.
        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("Koneksi gagal: %s\n", msg);
    }

    // Lepaskan sumber daya.
    SQLFreeHandle(SQL_HANDLE_DBC, dbc);
    SQLFreeHandle(SQL_HANDLE_ENV, env);

    return 0;
}

Jika instance saat ini hanya berisi basis data bernama default, hasil berikut akan dikembalikan:

Koneksi berhasil dibuat.
basis data: default
basis data: information_schema