日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

基于ODBC的應用開發

本文介紹C/C++語言如何通過MySQL的ODBC驅動進行應用程序開發。

前提條件

操作步驟

  1. 下載并安裝MySQL ODBC驅動。下載地址:ODBC

  2. 執行以下命令,安裝數據庫連接組件unixODBC。以Linux操作系統為例。

    yum install unixODBC-devel
  3. 修改ODBC配置文件odbcinst.ini中的MySQL依賴。

    [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

    配置項說明如下:

    配置項

    說明

    Description

    MySQL依賴描述,可自定義。

    Driver

    ODBC驅動程序。請填寫ODBC驅動程序實際存放路徑。

    Setup

    ODBC驅動安裝程序。請填寫ODBC驅動安裝程序實際存放路徑。

    Driver64

    ODBC 64位驅動程序。請填寫ODBC 64位驅動程序實際存放路徑。

    Setup64

    ODBC 64位驅動安裝程序。請填寫ODBC 64位驅動安裝程序實際存放路徑。

    FileUsage

    默認值為1。不修改。

  4. 配置連接參數。

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

    參數說明

    參數

    說明

    DRIVER

    MySQL驅動名。根據odbcinst.ini文件中的MySQL依賴名稱進行修改。

    SERVER

    Lindorm寬表引擎的MySQL兼容地址。如何獲取,請參見查看連接地址

    重要
    • 如果應用部署在ECS實例,建議您通過專有網絡訪問Lindorm實例,可獲得更高的安全性和更低的網絡延遲。

    • 如果應用部署在本地,在通過公網連接Lindorm實例前,需在控制臺開通公網地址。開通方式:在控制臺選擇數據庫連接 > 寬表引擎,在寬表引擎頁簽單擊開通公網地址

    • 通過專有網絡訪問Lindorm實例,SERVER請填寫MySQL兼容地址對應的專有網絡地址。通過公網訪問Lindorm實例,SERVER請填寫MySQL兼容地址對應的公網地址。

    PORT

    Lindorm寬表引擎MySQL協議的端口,固定為33060。

    DATABASE

    需要連接的數據庫名稱。默認連接default數據庫。

    USER

    如果您忘記用戶密碼,可以通過Lindorm寬表引擎的集群管理系統修改密碼。具體操作,請參見修改用戶密碼

    PASSWORD

  5. 創建連接,通過SQL語法使用Lindorm寬表引擎。以查詢所有數據庫為例。

    if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
            printf("連接成功\n");
    
            // 執行查詢
            SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
            SQLExecDirect(stmt, (SQLCHAR*)"show databases", SQL_NTS);
    
            // 獲取查詢結果
            SQLCHAR result[50];
            while (SQLFetch(stmt) == SQL_SUCCESS) {
                SQLGetData(stmt, 1, SQL_C_CHAR, result, sizeof(result), NULL);
                printf("database: %s\n", result);
            } 
            // 釋放資源
            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("連接失敗: %s\n", msg);
        }
    
        // 釋放資源
        SQLFreeHandle(SQL_HANDLE_DBC, dbc);
        SQLFreeHandle(SQL_HANDLE_ENV, env);
    
        return 0;

完整示例

完整示例代碼如下:

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

int main() {
    // 定義連接信息
    SQLHENV env;
    SQLHDBC dbc;
    SQLHSTMT stmt;
    SQLRETURN ret;

    // 初始化環境
    SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
    SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);

    // 建立連接
    SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
    SQLSetConnectAttr(dbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, SQL_IS_INTEGER);
    //lindorm_mysql_url為lindorm寬表引擎MySQL協議的連接地址,database為需要連接的數據庫,lindorm_user為用戶名,lindorm_password為用戶密碼 
    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("連接成功\n");

        // 執行查詢
        SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
        SQLExecDirect(stmt, (SQLCHAR*)"show databases", SQL_NTS);

        // 獲取查詢結果
        SQLCHAR result[50];
        while (SQLFetch(stmt) == SQL_SUCCESS) {
            SQLGetData(stmt, 1, SQL_C_CHAR, result, sizeof(result), NULL);
            printf("database: %s\n", result);
        } 
        // 釋放資源
        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("連接失敗: %s\n", msg);
    }

    // 釋放資源
    SQLFreeHandle(SQL_HANDLE_DBC, dbc);
    SQLFreeHandle(SQL_HANDLE_ENV, env);

    return 0;
}

如果當前實例僅有default一個數據庫,執行成功后將返回如下結果:

連接成功
database: default
database: information_schema