基于C API的應(yīng)用開發(fā)
本文介紹基于C或C++語言,通過MySQL C-API進(jìn)行應(yīng)用開發(fā)的方法。
前提條件
已開通MySQL協(xié)議兼容功能。如何開通,請參見開通MySQL協(xié)議兼容功能。
已將客戶端IP添加至白名單,具體操作請參見設(shè)置白名單。
操作步驟
安裝MySQL C-API相關(guān)依賴。以CentOS系統(tǒng)為例,執(zhí)行以下命令:
配置連接參數(shù)。
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;
參數(shù)說明
參數(shù)
說明
lindorm_addr
Lindorm寬表引擎的MySQL兼容地址。如何獲取MySQL兼容地址,請參見查看連接地址。
重要如果應(yīng)用部署在ECS實(shí)例,建議您通過專有網(wǎng)絡(luò)訪問Lindorm實(shí)例,可獲得更高的安全性和更低的網(wǎng)絡(luò)延遲。
如果應(yīng)用部署在本地,在通過公網(wǎng)連接Lindorm實(shí)例前,需在控制臺開通公網(wǎng)地址。開通方式:在控制臺選擇
,在寬表引擎頁簽單擊開通公網(wǎng)地址。通過專有網(wǎng)絡(luò)訪問Lindorm實(shí)例,lindorm_addr請?zhí)顚慚ySQL兼容地址對應(yīng)的專有網(wǎng)絡(luò)地址。通過公網(wǎng)訪問Lindorm實(shí)例,lindorm_addr請?zhí)顚慚ySQL兼容地址對應(yīng)的公網(wǎng)地址。
lindorm_user
如果您忘記用戶密碼,可以通過Lindorm寬表引擎的集群管理系統(tǒng)修改密碼。具體操作,請參見修改用戶密碼。
lindorm_password
database
需要連接的數(shù)據(jù)庫名稱。默認(rèn)連接default數(shù)據(jù)庫。
lindorm_mysql_port
Lindorm寬表引擎MySQL協(xié)議的端口,固定為33060。
創(chuàng)建連接,通過寬表SQL語法使用Lindorm寬表引擎。以創(chuàng)建表為例。
// 創(chuàng)建連接 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"); } // 創(chuàng)建表 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); }
假設(shè)代碼保存在
demo.c
文件中,執(zhí)行以下命令,編譯代碼。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"; //需要連接的數(shù)據(jù)庫名稱
int lindorm_mysql_port = 33060; //Lindorm寬表引擎MySQL協(xié)議的端口,固定為33060
// 創(chuàng)建連接
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");
}
// 創(chuàng)建表
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);
}
// 插入數(shù)據(jù)
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);
}
// 查詢數(shù)據(jù)
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;
}
執(zhí)行成功后將返回如下結(jié)果:
conect lindorm successfully
create table successfully
insert data successfully
name is 3 , age is wangwu