The Connector section of the official website reconstructs the C language interface description
This commit is contained in:
parent
975ce64a14
commit
7f09f18c07
|
@ -13,12 +13,18 @@ int main() {
|
||||||
uint16_t port = 0; // 0 means use the default port
|
uint16_t port = 0; // 0 means use the default port
|
||||||
TAOS *taos = taos_connect(host, user, passwd, db, port);
|
TAOS *taos = taos_connect(host, user, passwd, db, port);
|
||||||
if (taos == NULL) {
|
if (taos == NULL) {
|
||||||
int errno = taos_errno(NULL);
|
int errno = taos_errno(NULL);
|
||||||
char *msg = taos_errstr(NULL);
|
const char *msg = taos_errstr(NULL);
|
||||||
printf("%d, %s\n", errno, msg);
|
printf("%d, %s\n", errno, msg);
|
||||||
} else {
|
printf("failed to connect to server %s, errno: %d, msg: %s\n", host, errno, msg);
|
||||||
printf("connected\n");
|
taos_cleanup();
|
||||||
taos_close(taos);
|
return -1;
|
||||||
}
|
}
|
||||||
|
printf("success to connect server %s\n", host);
|
||||||
|
|
||||||
|
/* put your code here for read and write */
|
||||||
|
|
||||||
|
// close & clean
|
||||||
|
taos_close(taos);
|
||||||
taos_cleanup();
|
taos_cleanup();
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TAOS standard API example. The same syntax as MySQL, but only a subset
|
// TAOS standard API example. The same syntax as MySQL, but only a subset
|
||||||
// to compile: gcc -o CCreateDBDemo CCreateDBDemo.c -ltaos
|
// to compile: gcc -o create_db_demo create_db_demo.c -ltaos
|
||||||
|
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -32,22 +32,23 @@ const char *password = "taosdata";
|
||||||
// connect
|
// connect
|
||||||
TAOS *taos = taos_connect(ip, user, password, NULL, 0);
|
TAOS *taos = taos_connect(ip, user, password, NULL, 0);
|
||||||
if (taos == NULL) {
|
if (taos == NULL) {
|
||||||
printf("failed to connect to server, reason: %s\n", taos_errstr(NULL));
|
printf("failed to connect to server %s, reason: %s\n", ip, taos_errstr(NULL));
|
||||||
taos_cleanup();
|
taos_cleanup();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
printf("success to connect server %s\n", ip);
|
||||||
|
|
||||||
// create database
|
// create database
|
||||||
TAOS_RES *result = taos_query(taos, "CREATE DATABASE IF NOT EXISTS power");
|
TAOS_RES *result = taos_query(taos, "CREATE DATABASE IF NOT EXISTS power");
|
||||||
int code = taos_errno(result);
|
int code = taos_errno(result);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
printf("failed to create database, reason: %s\n", taos_errstr(result));
|
printf("failed to create database power, reason: %s\n", taos_errstr(result));
|
||||||
taos_close(taos);
|
taos_close(taos);
|
||||||
taos_cleanup();
|
taos_cleanup();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
taos_free_result(result);
|
taos_free_result(result);
|
||||||
printf("success to create database\n");
|
printf("success to create database power\n");
|
||||||
|
|
||||||
// use database
|
// use database
|
||||||
result = taos_query(taos, "USE power");
|
result = taos_query(taos, "USE power");
|
||||||
|
@ -58,13 +59,13 @@ const char* sql = "CREATE STABLE IF NOT EXISTS meters (ts TIMESTAMP, current FLO
|
||||||
result = taos_query(taos, sql);
|
result = taos_query(taos, sql);
|
||||||
code = taos_errno(result);
|
code = taos_errno(result);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
printf("failed to create table, reason: %s\n", taos_errstr(result));
|
printf("failed to create stable meters, reason: %s\n", taos_errstr(result));
|
||||||
taos_close(taos);
|
taos_close(taos);
|
||||||
taos_cleanup();
|
taos_cleanup();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
taos_free_result(result);
|
taos_free_result(result);
|
||||||
printf("success to create table\n");
|
printf("success to create table meters\n");
|
||||||
|
|
||||||
// close & clean
|
// close & clean
|
||||||
taos_close(taos);
|
taos_close(taos);
|
|
@ -14,7 +14,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TAOS standard API example. The same syntax as MySQL, but only a subset
|
// TAOS standard API example. The same syntax as MySQL, but only a subset
|
||||||
// to compile: gcc -o CInsertDataDemo CInsertDataDemo.c -ltaos
|
// to compile: gcc -o insert_data_demo insert_data_demo.c -ltaos
|
||||||
|
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -31,10 +31,11 @@ const char *password = "taosdata";
|
||||||
// connect
|
// connect
|
||||||
TAOS *taos = taos_connect(ip, user, password, NULL, 0);
|
TAOS *taos = taos_connect(ip, user, password, NULL, 0);
|
||||||
if (taos == NULL) {
|
if (taos == NULL) {
|
||||||
printf("failed to connect to server, reason: %s\n", taos_errstr(NULL));
|
printf("failed to connect to server %s, reason: %s\n", ip, taos_errstr(NULL));
|
||||||
taos_cleanup();
|
taos_cleanup();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
printf("success to connect server %s\n", ip);
|
||||||
|
|
||||||
// use database
|
// use database
|
||||||
TAOS_RES *result = taos_query(taos, "USE power");
|
TAOS_RES *result = taos_query(taos, "USE power");
|
||||||
|
@ -53,7 +54,7 @@ const char* sql = "INSERT INTO "
|
||||||
result = taos_query(taos, sql);
|
result = taos_query(taos, sql);
|
||||||
int code = taos_errno(result);
|
int code = taos_errno(result);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
printf("failed to insert rows, reason: %s\n", taos_errstr(result));
|
printf("failed to insert data to power.meters, ip: %s, reason: %s\n", ip, taos_errstr(result));
|
||||||
taos_close(taos);
|
taos_close(taos);
|
||||||
taos_cleanup();
|
taos_cleanup();
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -62,7 +63,7 @@ taos_free_result(result);
|
||||||
|
|
||||||
// you can check affectedRows here
|
// you can check affectedRows here
|
||||||
int rows = taos_affected_rows(result);
|
int rows = taos_affected_rows(result);
|
||||||
printf("success to insert %d rows\n", rows);
|
printf("success to insert %d rows data to power.meters\n", rows);
|
||||||
|
|
||||||
// close & clean
|
// close & clean
|
||||||
taos_close(taos);
|
taos_close(taos);
|
|
@ -14,7 +14,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TAOS standard API example. The same syntax as MySQL, but only a subset
|
// TAOS standard API example. The same syntax as MySQL, but only a subset
|
||||||
// to compile: gcc -o CQueryDataDemo CQueryDataDemo.c -ltaos
|
// to compile: gcc -o query_data_demo query_data_demo.c -ltaos
|
||||||
|
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -32,21 +32,22 @@ const char *password = "taosdata";
|
||||||
// connect
|
// connect
|
||||||
TAOS *taos = taos_connect(ip, user, password, NULL, 0);
|
TAOS *taos = taos_connect(ip, user, password, NULL, 0);
|
||||||
if (taos == NULL) {
|
if (taos == NULL) {
|
||||||
printf("failed to connect to server, reason: %s\n", taos_errstr(NULL));
|
printf("failed to connect to server %s, reason: %s\n", ip, taos_errstr(NULL));
|
||||||
taos_cleanup();
|
taos_cleanup();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
printf("success to connect server %s\n", ip);
|
||||||
|
|
||||||
// use database
|
// use database
|
||||||
TAOS_RES *result = taos_query(taos, "USE power");
|
TAOS_RES *result = taos_query(taos, "USE power");
|
||||||
taos_free_result(result);
|
taos_free_result(result);
|
||||||
|
|
||||||
// query data, please make sure the database and table are already created
|
// query data, please make sure the database and table are already created
|
||||||
const char* sql = "SELECT * FROM power.meters";
|
const char* sql = "SELECT ts, current, location FROM power.meters limit 100";
|
||||||
result = taos_query(taos, sql);
|
result = taos_query(taos, sql);
|
||||||
int code = taos_errno(result);
|
int code = taos_errno(result);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
printf("failed to select, reason: %s\n", taos_errstr(result));
|
printf("failed to query data from power.meters, ip: %s, reason: %s\n", ip, taos_errstr(result));
|
||||||
taos_close(taos);
|
taos_close(taos);
|
||||||
taos_cleanup();
|
taos_cleanup();
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -69,6 +70,7 @@ while ((row = taos_fetch_row(result))) {
|
||||||
}
|
}
|
||||||
printf("total rows: %d\n", rows);
|
printf("total rows: %d\n", rows);
|
||||||
taos_free_result(result);
|
taos_free_result(result);
|
||||||
|
printf("success to query data from power.meters\n");
|
||||||
|
|
||||||
// close & clean
|
// close & clean
|
||||||
taos_close(taos);
|
taos_close(taos);
|
|
@ -14,7 +14,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TAOS standard API example. The same syntax as MySQL, but only a subset
|
// TAOS standard API example. The same syntax as MySQL, but only a subset
|
||||||
// to compile: gcc -o CSmlInsertDemo CSmlInsertDemo.c -ltaos
|
// to compile: gcc -o sml_insert_demo sml_insert_demo.c -ltaos
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -31,22 +31,23 @@ const char *password = "taosdata";
|
||||||
// connect
|
// connect
|
||||||
TAOS *taos = taos_connect(ip, user, password, NULL, 0);
|
TAOS *taos = taos_connect(ip, user, password, NULL, 0);
|
||||||
if (taos == NULL) {
|
if (taos == NULL) {
|
||||||
printf("failed to connect to server, reason: %s\n", taos_errstr(NULL));
|
printf("failed to connect to server %s, reason: %s\n", ip, taos_errstr(NULL));
|
||||||
taos_cleanup();
|
taos_cleanup();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
printf("success to connect server %s\n", ip);
|
||||||
|
|
||||||
// create database
|
// create database
|
||||||
TAOS_RES *result = taos_query(taos, "CREATE DATABASE IF NOT EXISTS power");
|
TAOS_RES *result = taos_query(taos, "CREATE DATABASE IF NOT EXISTS power");
|
||||||
int code = taos_errno(result);
|
int code = taos_errno(result);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
printf("failed to create database, reason: %s\n", taos_errstr(result));
|
printf("failed to create database power, reason: %s\n", taos_errstr(result));
|
||||||
taos_close(taos);
|
taos_close(taos);
|
||||||
taos_cleanup();
|
taos_cleanup();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
taos_free_result(result);
|
taos_free_result(result);
|
||||||
printf("success to create database\n");
|
printf("success to create database power\n");
|
||||||
|
|
||||||
// use database
|
// use database
|
||||||
result = taos_query(taos, "USE power");
|
result = taos_query(taos, "USE power");
|
|
@ -1,175 +1,175 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
* This program is free software: you can use, redistribute, and/or modify
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
* it under the terms of the GNU Affero General Public License, version 3
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TAOS standard API example. The same syntax as MySQL, but only a subset
|
// TAOS standard API example. The same syntax as MySQL, but only a subset
|
||||||
// to compile: gcc -o CStmtInsertDemo CStmtInsertDemo.c -ltaos
|
// to compile: gcc -o stmt_insert_demo stmt_insert_demo.c -ltaos
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include "taos.h"
|
#include "taos.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief execute sql only.
|
* @brief execute sql only.
|
||||||
*
|
*
|
||||||
* @param taos
|
* @param taos
|
||||||
* @param sql
|
* @param sql
|
||||||
*/
|
*/
|
||||||
void executeSQL(TAOS *taos, const char *sql) {
|
void executeSQL(TAOS *taos, const char *sql) {
|
||||||
TAOS_RES *res = taos_query(taos, sql);
|
TAOS_RES *res = taos_query(taos, sql);
|
||||||
int code = taos_errno(res);
|
int code = taos_errno(res);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
printf("%s\n", taos_errstr(res));
|
printf("%s\n", taos_errstr(res));
|
||||||
taos_free_result(res);
|
taos_free_result(res);
|
||||||
taos_close(taos);
|
taos_close(taos);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
taos_free_result(res);
|
taos_free_result(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief check return status and exit program when error occur.
|
* @brief check return status and exit program when error occur.
|
||||||
*
|
*
|
||||||
* @param stmt
|
* @param stmt
|
||||||
* @param code
|
* @param code
|
||||||
* @param msg
|
* @param msg
|
||||||
*/
|
*/
|
||||||
void checkErrorCode(TAOS_STMT *stmt, int code, const char *msg) {
|
void checkErrorCode(TAOS_STMT *stmt, int code, const char *msg) {
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
printf("%s. code: %d, error: %s\n", msg,code,taos_stmt_errstr(stmt));
|
printf("%s. code: %d, error: %s\n", msg,code,taos_stmt_errstr(stmt));
|
||||||
taos_stmt_close(stmt);
|
taos_stmt_close(stmt);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int64_t ts;
|
int64_t ts;
|
||||||
float current;
|
float current;
|
||||||
int voltage;
|
int voltage;
|
||||||
float phase;
|
float phase;
|
||||||
} Row;
|
} Row;
|
||||||
|
|
||||||
int num_of_sub_table = 10;
|
int num_of_sub_table = 10;
|
||||||
int num_of_row = 10;
|
int num_of_row = 10;
|
||||||
/**
|
/**
|
||||||
* @brief insert data using stmt API
|
* @brief insert data using stmt API
|
||||||
*
|
*
|
||||||
* @param taos
|
* @param taos
|
||||||
*/
|
*/
|
||||||
void insertData(TAOS *taos) {
|
void insertData(TAOS *taos) {
|
||||||
// init
|
// init
|
||||||
TAOS_STMT *stmt = taos_stmt_init(taos);
|
TAOS_STMT *stmt = taos_stmt_init(taos);
|
||||||
// prepare
|
// prepare
|
||||||
const char *sql = "INSERT INTO ? USING meters TAGS(?,?) VALUES (?,?,?,?)";
|
const char *sql = "INSERT INTO ? USING meters TAGS(?,?) VALUES (?,?,?,?)";
|
||||||
int code = taos_stmt_prepare(stmt, sql, 0);
|
int code = taos_stmt_prepare(stmt, sql, 0);
|
||||||
checkErrorCode(stmt, code, "failed to execute taos_stmt_prepare");
|
checkErrorCode(stmt, code, "failed to execute taos_stmt_prepare");
|
||||||
for (int i = 1; i <= num_of_sub_table; i++) {
|
for (int i = 1; i <= num_of_sub_table; i++) {
|
||||||
char table_name[20];
|
char table_name[20];
|
||||||
sprintf(table_name, "d_bind_%d", i);
|
sprintf(table_name, "d_bind_%d", i);
|
||||||
char location[20];
|
char location[20];
|
||||||
sprintf(location, "location_%d", i);
|
sprintf(location, "location_%d", i);
|
||||||
|
|
||||||
// set table name and tags
|
// set table name and tags
|
||||||
TAOS_MULTI_BIND tags[2];
|
TAOS_MULTI_BIND tags[2];
|
||||||
// groupId
|
// groupId
|
||||||
tags[0].buffer_type = TSDB_DATA_TYPE_INT;
|
tags[0].buffer_type = TSDB_DATA_TYPE_INT;
|
||||||
tags[0].buffer_length = sizeof(int);
|
tags[0].buffer_length = sizeof(int);
|
||||||
tags[0].length = (int32_t *)&tags[0].buffer_length;
|
tags[0].length = (int32_t *)&tags[0].buffer_length;
|
||||||
tags[0].buffer = &i;
|
tags[0].buffer = &i;
|
||||||
tags[0].is_null = NULL;
|
tags[0].is_null = NULL;
|
||||||
tags[0].num = 1;
|
tags[0].num = 1;
|
||||||
// location
|
// location
|
||||||
tags[1].buffer_type = TSDB_DATA_TYPE_BINARY;
|
tags[1].buffer_type = TSDB_DATA_TYPE_BINARY;
|
||||||
tags[1].buffer_length = strlen(location);
|
tags[1].buffer_length = strlen(location);
|
||||||
tags[1].length =(int32_t *) &tags[1].buffer_length;
|
tags[1].length =(int32_t *) &tags[1].buffer_length;
|
||||||
tags[1].buffer = location;
|
tags[1].buffer = location;
|
||||||
tags[1].is_null = NULL;
|
tags[1].is_null = NULL;
|
||||||
tags[1].num = 1;
|
tags[1].num = 1;
|
||||||
code = taos_stmt_set_tbname_tags(stmt, table_name, tags);
|
code = taos_stmt_set_tbname_tags(stmt, table_name, tags);
|
||||||
checkErrorCode(stmt, code, "failed to set table name and tags\n");
|
checkErrorCode(stmt, code, "failed to set table name and tags\n");
|
||||||
|
|
||||||
// insert rows
|
// insert rows
|
||||||
TAOS_MULTI_BIND params[4];
|
TAOS_MULTI_BIND params[4];
|
||||||
// ts
|
// ts
|
||||||
params[0].buffer_type = TSDB_DATA_TYPE_TIMESTAMP;
|
params[0].buffer_type = TSDB_DATA_TYPE_TIMESTAMP;
|
||||||
params[0].buffer_length = sizeof(int64_t);
|
params[0].buffer_length = sizeof(int64_t);
|
||||||
params[0].length = (int32_t *)¶ms[0].buffer_length;
|
params[0].length = (int32_t *)¶ms[0].buffer_length;
|
||||||
params[0].is_null = NULL;
|
params[0].is_null = NULL;
|
||||||
params[0].num = 1;
|
params[0].num = 1;
|
||||||
// current
|
// current
|
||||||
params[1].buffer_type = TSDB_DATA_TYPE_FLOAT;
|
params[1].buffer_type = TSDB_DATA_TYPE_FLOAT;
|
||||||
params[1].buffer_length = sizeof(float);
|
params[1].buffer_length = sizeof(float);
|
||||||
params[1].length = (int32_t *)¶ms[1].buffer_length;
|
params[1].length = (int32_t *)¶ms[1].buffer_length;
|
||||||
params[1].is_null = NULL;
|
params[1].is_null = NULL;
|
||||||
params[1].num = 1;
|
params[1].num = 1;
|
||||||
// voltage
|
// voltage
|
||||||
params[2].buffer_type = TSDB_DATA_TYPE_INT;
|
params[2].buffer_type = TSDB_DATA_TYPE_INT;
|
||||||
params[2].buffer_length = sizeof(int);
|
params[2].buffer_length = sizeof(int);
|
||||||
params[2].length = (int32_t *)¶ms[2].buffer_length;
|
params[2].length = (int32_t *)¶ms[2].buffer_length;
|
||||||
params[2].is_null = NULL;
|
params[2].is_null = NULL;
|
||||||
params[2].num = 1;
|
params[2].num = 1;
|
||||||
// phase
|
// phase
|
||||||
params[3].buffer_type = TSDB_DATA_TYPE_FLOAT;
|
params[3].buffer_type = TSDB_DATA_TYPE_FLOAT;
|
||||||
params[3].buffer_length = sizeof(float);
|
params[3].buffer_length = sizeof(float);
|
||||||
params[3].length = (int32_t *)¶ms[3].buffer_length;
|
params[3].length = (int32_t *)¶ms[3].buffer_length;
|
||||||
params[3].is_null = NULL;
|
params[3].is_null = NULL;
|
||||||
params[3].num = 1;
|
params[3].num = 1;
|
||||||
|
|
||||||
for (int j = 0; j < num_of_row; j++) {
|
for (int j = 0; j < num_of_row; j++) {
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
gettimeofday(&tv, NULL);
|
gettimeofday(&tv, NULL);
|
||||||
long long milliseconds = tv.tv_sec * 1000LL + tv.tv_usec / 1000; // current timestamp in milliseconds
|
long long milliseconds = tv.tv_sec * 1000LL + tv.tv_usec / 1000; // current timestamp in milliseconds
|
||||||
int64_t ts = milliseconds + j;
|
int64_t ts = milliseconds + j;
|
||||||
float current = (float)rand() / RAND_MAX * 30;
|
float current = (float)rand() / RAND_MAX * 30;
|
||||||
int voltage = rand() % 300;
|
int voltage = rand() % 300;
|
||||||
float phase = (float)rand() / RAND_MAX;
|
float phase = (float)rand() / RAND_MAX;
|
||||||
params[0].buffer = &ts;
|
params[0].buffer = &ts;
|
||||||
params[1].buffer = ¤t;
|
params[1].buffer = ¤t;
|
||||||
params[2].buffer = &voltage;
|
params[2].buffer = &voltage;
|
||||||
params[3].buffer = &phase;
|
params[3].buffer = &phase;
|
||||||
// bind param
|
// bind param
|
||||||
code = taos_stmt_bind_param(stmt, params);
|
code = taos_stmt_bind_param(stmt, params);
|
||||||
checkErrorCode(stmt, code, "failed to bind param");
|
checkErrorCode(stmt, code, "failed to bind param");
|
||||||
}
|
}
|
||||||
// add batch
|
// add batch
|
||||||
code = taos_stmt_add_batch(stmt);
|
code = taos_stmt_add_batch(stmt);
|
||||||
checkErrorCode(stmt, code, "failed to add batch");
|
checkErrorCode(stmt, code, "failed to add batch");
|
||||||
// execute batch
|
// execute batch
|
||||||
code = taos_stmt_execute(stmt);
|
code = taos_stmt_execute(stmt);
|
||||||
checkErrorCode(stmt, code, "failed to exec stmt");
|
checkErrorCode(stmt, code, "failed to exec stmt");
|
||||||
// get affected rows
|
// get affected rows
|
||||||
int affected = taos_stmt_affected_rows_once(stmt);
|
int affected = taos_stmt_affected_rows_once(stmt);
|
||||||
printf("table %s insert %d rows.\n", table_name, affected);
|
printf("table %s insert %d rows.\n", table_name, affected);
|
||||||
}
|
}
|
||||||
taos_stmt_close(stmt);
|
taos_stmt_close(stmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
TAOS *taos = taos_connect("localhost", "root", "taosdata", NULL, 6030);
|
TAOS *taos = taos_connect("localhost", "root", "taosdata", NULL, 6030);
|
||||||
if (taos == NULL) {
|
if (taos == NULL) {
|
||||||
printf("failed to connect to server\n");
|
printf("failed to connect to server\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
// create database and table
|
// create database and table
|
||||||
executeSQL(taos, "CREATE DATABASE IF NOT EXISTS power");
|
executeSQL(taos, "CREATE DATABASE IF NOT EXISTS power");
|
||||||
executeSQL(taos, "USE power");
|
executeSQL(taos, "USE power");
|
||||||
executeSQL(taos,
|
executeSQL(taos,
|
||||||
"CREATE STABLE IF NOT EXISTS power.meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS "
|
"CREATE STABLE IF NOT EXISTS power.meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS "
|
||||||
"(groupId INT, location BINARY(24))");
|
"(groupId INT, location BINARY(24))");
|
||||||
insertData(taos);
|
insertData(taos);
|
||||||
taos_close(taos);
|
taos_close(taos);
|
||||||
taos_cleanup();
|
taos_cleanup();
|
||||||
}
|
}
|
|
@ -14,7 +14,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TAOS standard API example. The same syntax as MySQL, but only a subset
|
// TAOS standard API example. The same syntax as MySQL, but only a subset
|
||||||
// to compile: gcc -o CWithReqIdDemo CWithReqIdDemo.c -ltaos
|
// to compile: gcc -o with_reqid_demo with_reqid_demo.c -ltaos
|
||||||
|
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -32,23 +32,24 @@ const char *password = "taosdata";
|
||||||
// connect
|
// connect
|
||||||
TAOS *taos = taos_connect(ip, user, password, NULL, 0);
|
TAOS *taos = taos_connect(ip, user, password, NULL, 0);
|
||||||
if (taos == NULL) {
|
if (taos == NULL) {
|
||||||
printf("failed to connect to server, reason: %s\n", taos_errstr(NULL));
|
printf("failed to connect to server %s, reason: %s\n", ip, taos_errstr(NULL));
|
||||||
taos_cleanup();
|
taos_cleanup();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
printf("success to connect server %s\n", ip);
|
||||||
|
|
||||||
// create database
|
// create database
|
||||||
TAOS_RES *result = taos_query_with_reqid(taos, "CREATE DATABASE IF NOT EXISTS power", 1L);
|
TAOS_RES *result = taos_query_with_reqid(taos, "CREATE DATABASE IF NOT EXISTS power", 1L);
|
||||||
int code = taos_errno(result);
|
int code = taos_errno(result);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
printf("failed to create database, reason: %s\n", taos_errstr(result));
|
printf("failed to create database power, reason: %s\n", taos_errstr(result));
|
||||||
taos_free_result(result);
|
taos_free_result(result);
|
||||||
taos_close(taos);
|
taos_close(taos);
|
||||||
taos_cleanup();
|
taos_cleanup();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
taos_free_result(result);
|
taos_free_result(result);
|
||||||
printf("success to create database\n");
|
printf("success to create database power\n");
|
||||||
|
|
||||||
// use database
|
// use database
|
||||||
result = taos_query_with_reqid(taos, "USE power", 2L);
|
result = taos_query_with_reqid(taos, "USE power", 2L);
|
||||||
|
@ -59,7 +60,7 @@ const char* sql = "SELECT * FROM power.meters";
|
||||||
result = taos_query_with_reqid(taos, sql, 3L);
|
result = taos_query_with_reqid(taos, sql, 3L);
|
||||||
code = taos_errno(result);
|
code = taos_errno(result);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
printf("failed to select, reason: %s\n", taos_errstr(result));
|
printf("failed to query data from power.meters, ip: %s, reason: %s\n", ip, taos_errstr(result));
|
||||||
taos_close(taos);
|
taos_close(taos);
|
||||||
taos_cleanup();
|
taos_cleanup();
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -82,6 +83,7 @@ while ((row = taos_fetch_row(result))) {
|
||||||
}
|
}
|
||||||
printf("total rows: %d\n", rows);
|
printf("total rows: %d\n", rows);
|
||||||
taos_free_result(result);
|
taos_free_result(result);
|
||||||
|
printf("success to query data from power.meters\n");
|
||||||
|
|
||||||
// close & clean
|
// close & clean
|
||||||
taos_close(taos);
|
taos_close(taos);
|
|
@ -380,16 +380,7 @@ DSN 的详细说明和如何使用详见 [连接功能](../../reference/connecto
|
||||||
下面为建立连接的示例代码,其中省略了查询和写入部分,展示了如何建立连接、关闭连接以及清除资源。
|
下面为建立连接的示例代码,其中省略了查询和写入部分,展示了如何建立连接、关闭连接以及清除资源。
|
||||||
|
|
||||||
```c
|
```c
|
||||||
TAOS *taos = taos_connect("localhost:6030", "root", "taosdata", NULL, 0);
|
{{#include docs/examples/c/connect_example.c}}
|
||||||
if (taos == NULL) {
|
|
||||||
printf("failed to connect to server, reason:%s\n", "null taos" /*taos_errstr(taos)*/);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* put your code here for read and write */
|
|
||||||
|
|
||||||
taos_close(taos);
|
|
||||||
taos_cleanup();
|
|
||||||
```
|
```
|
||||||
|
|
||||||
在上面的示例代码中, `taos_connect()` 建立到客户端程序所在主机的 6030 端口的连接,`taos_close()`关闭当前连接,`taos_cleanup()`清除客户端驱动所申请和使用的资源。
|
在上面的示例代码中, `taos_connect()` 建立到客户端程序所在主机的 6030 端口的连接,`taos_close()`关闭当前连接,`taos_cleanup()`清除客户端驱动所申请和使用的资源。
|
||||||
|
|
|
@ -69,7 +69,7 @@ REST API:直接调用 `taosadapter` 提供的 REST API 接口,进行数据
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="C" value="c">
|
<TabItem label="C" value="c">
|
||||||
```c
|
```c
|
||||||
{{#include docs/examples/c/CCreateDBDemo.c:create_db_and_table}}
|
{{#include docs/examples/c/create_db_demo.c:create_db_and_table}}
|
||||||
```
|
```
|
||||||
> **注意**:如果不使用 `USE power` 指定数据库,则后续对表的操作都需要增加数据库名称作为前缀,如 power.meters。
|
> **注意**:如果不使用 `USE power` 指定数据库,则后续对表的操作都需要增加数据库名称作为前缀,如 power.meters。
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
@ -146,7 +146,7 @@ NOW 为系统内部函数,默认为客户端所在计算机当前时间。 NOW
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="C" value="c">
|
<TabItem label="C" value="c">
|
||||||
```c
|
```c
|
||||||
{{#include docs/examples/c/CInsertDataDemo.c:insert_data}}
|
{{#include docs/examples/c/insert_data_demo.c:insert_data}}
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note**
|
**Note**
|
||||||
|
@ -215,7 +215,7 @@ curl --location -uroot:taosdata 'http://127.0.0.1:6041/rest/sql' \
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="C" value="c">
|
<TabItem label="C" value="c">
|
||||||
```c
|
```c
|
||||||
{{#include docs/examples/c/CQueryDataDemo.c:query_data}}
|
{{#include docs/examples/c/query_data_demo.c:query_data}}
|
||||||
```
|
```
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="REST API" value="rest">
|
<TabItem label="REST API" value="rest">
|
||||||
|
@ -290,7 +290,7 @@ reqId 可用于请求链路追踪,reqId 就像分布式系统中的 traceId
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="C" value="c">
|
<TabItem label="C" value="c">
|
||||||
```c
|
```c
|
||||||
{{#include docs/examples/c/CWithReqIdDemo.c:with_reqid}}
|
{{#include docs/examples/c/with_reqid_demo.c:with_reqid}}
|
||||||
```
|
```
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="REST API" value="rest">
|
<TabItem label="REST API" value="rest">
|
||||||
|
|
|
@ -246,7 +246,7 @@ writer.write(lineDemo, SchemalessProtocolType.LINE, SchemalessTimestampType.NANO
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="C" value="c">
|
<TabItem label="C" value="c">
|
||||||
```c
|
```c
|
||||||
{{#include docs/examples/c/CSmlInsertDemo.c:schemaless}}
|
{{#include docs/examples/c/sml_insert_demo.c:schemaless}}
|
||||||
```
|
```
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,7 @@ import TabItem from "@theme/TabItem";
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="C" value="c">
|
<TabItem label="C" value="c">
|
||||||
```c
|
```c
|
||||||
{{#include docs/examples/c/CStmtInsertDemo.c}}
|
{{#include docs/examples/c/stmt_insert_demo.c}}
|
||||||
```
|
```
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue