Topik ini menjelaskan cara menggunakan driver Open Database Connectivity (ODBC) untuk MySQL dalam mengembangkan aplikasi C atau C++.
Prasyarat
Fitur kompatibilitas MySQL harus diaktifkan untuk instance tersebut. Untuk informasi lebih lanjut, lihat Mengaktifkan fitur kompatibilitas MySQL.
Alamat IP klien Anda harus ditambahkan ke daftar putih instance Lindorm Anda. Untuk informasi lebih lanjut, lihat Mengonfigurasi daftar putih.
Prosedur
Unduh dan instal driver ODBC untuk MySQL dari situs resmi MySQL.
Instal komponen koneksi unixODBC. Perintah berikut menunjukkan contoh cara menginstal unixODBC di Linux:
yum install unixODBC-develUbah 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 = 1Tabel 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.
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.
PentingJika 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 . 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
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