#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);