#C驱动使用介绍
# 连接数据库
通过yacAllocHandle()函数为句柄分配空间,然后通过yacConnect()函数建立数据库连接:
const YacChar* gSrvStr = "127.0.0.1:1688";
const YacChar* user = "sys";
const YacChar* pwd = "password";
yacAllocHandle(YAC_HANDLE_ENV, NULL, &gTestEnv.env);
yacAllocHandle(YAC_HANDLE_DBC, gTestEnv.env, &gTestEnv.conn);
yacConnect(gTestEnv.conn, gSrvStr, YAC_NULL_TERM_STR, user, YAC_NULL_TERM_STR, pwd, YAC_NULL_TERM_STR);
yacAllocHandle(YAC_HANDLE_STMT, gTestEnv.conn, &gTestEnv.stmt);
连接串说明
参数 | 描述 |
---|---|
gSrvStr | 数据库连接描述符。格式如下: host:port * host:主机域名或IP地址,需配置为单机实例服务器地址或分布式CN服务器地址; * port:数据库服务端口,如1688。 |
user | 数据库用户名。 |
pwd | 数据库用户密码。 |
示例:
#include <string.h>
#include "yacli.h"
typedef struct {
YacHandle env;
YacHandle conn;
YacHandle stmt;
} YacTestEnv;
YacTestEnv gTestEnv = { 0 };
int main()
{
//连接数据库
//更改为实际数据库服务器的IP和端口
const YacChar* gSrvStr = "127.0.0.1:1688";
const YacChar* user = "sys";
const YacChar* pwd = "password";
yacAllocHandle(YAC_HANDLE_ENV, NULL, &gTestEnv.env);
yacAllocHandle(YAC_HANDLE_DBC, gTestEnv.env, &gTestEnv.conn);
yacConnect(gTestEnv.conn, gSrvStr, YAC_NULL_TERM_STR, user, YAC_NULL_TERM_STR, pwd, YAC_NULL_TERM_STR);
yacAllocHandle(YAC_HANDLE_STMT, gTestEnv.conn, &gTestEnv.stmt);
//单行绑定导入数据
yacDirectExecute(gTestEnv.stmt, "drop table if exists test_yacli",YAC_NULL_TERM_STR);
yacDirectExecute(gTestEnv.stmt, "create table test_yacli(col1 int, col2 varchar(200))", YAC_NULL_TERM_STR);
yacPrepare(gTestEnv.stmt, "insert into test_yacli values(?, ?)",YAC_NULL_TERM_STR);
YacInt32 inputInt;
YacChar inputVarchar[200];
YacInt32 indicator;
yacBindParameter(gTestEnv.stmt, 1, YAC_PARAM_INPUT, YAC_SQLT_INTEGER, &inputInt, sizeof(YacInt32), sizeof(YacInt32), NULL);
yacBindParameter(gTestEnv.stmt, 2, YAC_PARAM_INPUT, YAC_SQLT_VARCHAR2, inputVarchar, 200, 200, &indicator);
inputInt = 99;
memcpy(inputVarchar, "0123456789", 10);
indicator = 10;
yacExecute(gTestEnv.stmt);
yacCommit(gTestEnv.conn);
//断开数据库
yacFreeHandle(YAC_HANDLE_STMT, gTestEnv.stmt);
yacDisconnect(gTestEnv.conn);
yacFreeHandle(YAC_HANDLE_DBC, gTestEnv.conn);
yacFreeHandle(YAC_HANDLE_ENV, gTestEnv.env);
return 0;
}
# 执行SQL
# 执行SQL语句
调用 yacDirectExecute()函数向数据库发起执行不需绑定数据的SQL请求。
yacDirectExecute(gTestEnv.stmt, "drop table if exists test_yacli",YAC_NULL_TERM_STR);
yacDirectExecute(gTestEnv.stmt, "create table test_yacli(col1 int, col2 varchar(200))", YAC_NULL_TERM_STR);
调用 yacDirectExecute()函数向数据库发起执行绑定参数数据的SQL请求。
yacBindParameter(gTestEnv.stmt, 1, YAC_PARAM_INPUT, YAC_SQLT_INTEGER, &inputInt, sizeof(YacInt32), sizeof(YacInt32), NULL);
yacBindParameter(gTestEnv.stmt, 2, YAC_PARAM_INPUT, YAC_SQLT_VARCHAR2, inputVarchar, 200, 200, &indicator);
inputInt = 99;
memcpy(inputVarchar, "0123456789", 10);
indicator = 10;
yacDirectExecute(gTestEnv.stmt, "insert into test_yacli values(?, ?)",YAC_NULL_TERM_STR);
调用 yacPrepare()函数向数据库发起预编译SQL的请求。
yacPrepare(gTestEnv.stmt, "insert into test_yacli values(?, ?)",YAC_NULL_TERM_STR);
定义参数。
YacInt32 inputInt;
YacChar inputVarchar[200];
YacInt32 indicator;
调用 yacBindParameter()函数对指定参数的属性绑定赋值。
yacBindParameter(gTestEnv.stmt, 1, YAC_PARAM_INPUT, YAC_SQLT_INTEGER, &inputInt, sizeof(YacInt32), sizeof(YacInt32), NULL);
yacBindParameter(gTestEnv.stmt, 2, YAC_PARAM_INPUT, YAC_SQLT_VARCHAR2, inputVarchar, 200, 200, &indicator);
inputInt = 99;
memcpy(inputVarchar, "0123456789", 10);
indicator = 10;
调用yacExecute()函数向数据库发起执行yacPrepare()预编译的SQL请求。
yacExecute(gTestEnv.stmt);
调用yacCommit()函数向数据库发起提交请求。
yacCommit(gTestEnv.conn);
# 关闭数据库连接
通过yacFreeHandle()函数释放句柄空间,然后通过yacDisconnect()函数向数据库发起断开连接请求。
yacFreeHandle(YAC_HANDLE_STMT, gTestEnv.stmt);
yacDisconnect(gTestEnv.conn);
yacFreeHandle(YAC_HANDLE_DBC, gTestEnv.conn);
yacFreeHandle(YAC_HANDLE_ENV, gTestEnv.env);