基于C API的应用开发

本文介绍基于C或C++语言,通过MySQL C-API进行应用开发的方法。

前提条件

操作步骤

  1. 安装MySQL C-API相关依赖。以CentOS系统为例,执行以下命令:

  2. yum install mysql-devel
  3. 配置连接参数。

    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;

    参数说明

    参数

    说明

    lindorm_addr

    Lindorm宽表引擎的MySQL兼容地址。如何获取MySQL兼容地址,请参见查看连接地址

    重要
    • 如果应用部署在ECS实例,建议您通过专有网络访问Lindorm实例,可获得更高的安全性和更低的网络延迟。

    • 如果应用部署在本地,在通过公网连接Lindorm实例前,需在控制台开通公网地址。开通方式:在控制台选择数据库连接 > 宽表引擎,在宽表引擎页签单击开通公网地址

    • 通过专有网络访问Lindorm实例,lindorm_addr请填写MySQL兼容地址对应的专有网络地址。通过公网访问Lindorm实例,lindorm_addr请填写MySQL兼容地址对应的公网地址。

    lindorm_user

    如果您忘记用户密码,可以通过Lindorm宽表引擎的集群管理系统修改密码。具体操作,请参见修改用户密码

    lindorm_password

    database

    需要连接的数据库名称。默认连接default数据库。

    lindorm_mysql_port

    Lindorm宽表引擎MySQL协议的端口,固定为33060。

  4. 创建连接,通过宽表SQL语法使用Lindorm宽表引擎。以创建表为例。

        // 创建连接
        if (!mysql_real_connect(&conn,lindorm_addr,lindorm_user,lindorm_password,database,lindorm_mysql_port,NULL,0)) {
            printf("Failed to connect to database: Error: %s\n",
                    mysql_error(&conn));
            exit(1);
        } else {
            printf("conect lindorm successfully\n");
        }
    
    
        // 创建表
        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 {
            printf("create table Error: %s\n", mysql_error(&conn));
            exit(1);
        }
  5. 假设代码保存在demo.c文件中,执行以下命令,编译代码。

    gcc -o a.out $(mysql_config --cflags) demo.c $(mysql_config --libs)
    ./a.out

完整示例

完整示例代码如下:

#include <stdio.h>
#include "mysql/mysql.h"
int main(){
    MYSQL conn;
    int res;
    MYSQL_RES * result;
    MYSQL_ROW row;
    mysql_init(&conn);

    // 连接配置
    char lindorm_addr[] = "ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com"; //Lindorm宽表引擎的MySQL兼容地址
    char lindorm_user[] = "user"; //Lindorm宽表引擎的用户名
    char lindorm_password[] = "test"; //Lindorm宽表引擎的密码
    char database[] = "default"; //需要连接的数据库名称
    int lindorm_mysql_port = 33060; //Lindorm宽表引擎MySQL协议的端口,固定为33060

    // 创建连接
    if (!mysql_real_connect(&conn,lindorm_addr,lindorm_user,lindorm_password,database,lindorm_mysql_port,NULL,0)) {
        printf("Failed to connect to database: Error: %s\n",
                mysql_error(&conn));
        exit(1);
    } else {
        printf("conect lindorm successfully\n");
    }


    // 创建表
    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 {
        printf("create table Error: %s\n", mysql_error(&conn));
        exit(1);
    }

    // 插入数据
    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 {
        printf("insert data Error: %s\n", mysql_error(&conn));
        exit(1);
    }

    // 查询数据
    char select_query[] = "select * from user_test";
    if (mysql_query(&conn, select_query) != 0) {
        printf("select Error: %s\n", mysql_error(&conn));
        exit(1);
    } else {
        if ((result = mysql_store_result(&conn)) == NULL) {
            printf("store result Error: %s\n", mysql_error(&conn));
            exit(1);
        }
        else {
            while ((row = mysql_fetch_row(result)) != NULL) {
                printf("name is %s , ", row[0]);
                printf("age is %s\n", row[1]);
            }
        }
    }

    return 0;
}

执行成功后将返回如下结果:

conect lindorm successfully
create table successfully
insert data successfully
name is 3 , age is wangwu