本文介紹基於C或C++語言,通過MySQL C-API進行應用開發的方法。
前提條件
已開通MySQL協議相容功能。如何開通,請參見開通MySQL協議相容功能。
已將用戶端IP添加至白名單,具體操作請參見設定白名單。
操作步驟
安裝MySQL C-API相關依賴。以CentOS系統為例,執行以下命令:
配置串連參數。
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。
建立串連,通過寬表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); }
假設代碼儲存在
demo.c
檔案中,執行以下命令,編譯代碼。gcc -o a.out $(mysql_config --cflags) demo.c $(mysql_config --libs) ./a.out
yum install mysql-devel
完整樣本
完整範例程式碼如下:
#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