VastbaseE100

基于开源技术的HTAP数据库管理系统。性能优异,稳定可靠,提供诸多专属领域特性。

Menu

使用ODBC连接数据库

配置数据源

该步骤并不是必须的,取决于获取连接的方式,详见下文”连接数据库”章节。

编辑/etc/odbc.ini文件,加入以下内容 (根据实际情况修改数据库连接参数):

#[$DSN]定义数据源名称
[Test]
#数据源说明
Description=Test
#使用的驱动,与/etc/odbcinst.ini中的驱动名相对应
Driver=PostgreSQL
#数据库名
Database=atlasdb
#数据库所在的主机名或IP
Servername=localhost
#数据库用户名(可不填,在代码中指定即可)
UserName=atlasdb
#数据库用户密码(可不填,在代码中指定即可)
Password=atlasdb
#数据库端口
Port=5432

上述配置中该数据源的DSN为Test,可以通过isql来验证配置是否正确,执行以下命令如果显示Connected则表示连接成功:

isql -v Test

如果数据源配置中未指定用户密码,则用isql测试连接时需要指定用户密码:

isql -v Test atlasuser atlaspassword

连接数据库

获取ODBC连接

获取连接有几种方法。

方法一:通过调用SQLConnect()函数连接到数据库:

SQLHENV env;  //环境句柄   
SQLHDBC conn;  //连接句柄   
SQLRETURN ret;	//返回值
 /*分配环境句柄*/
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
/*设置ODBC环境属性*/
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0);
/*分配连接句柄*/
SQLAllocHandle(SQL_HANDLE_DBC, env, &conn);
 /*连接到数据源*/ 
ret = SQLConnect (conn, (SQLCHAR*)"DSN",SQL_NTS,(SQLCHAR*)"USER",SQL_NTS,  (SQLCHAR*)"PASSWORD",SQL_NTS); 
 /* 如果在odbc.ini配置文件中指定了用户名和密码,则对应的参数可以传NULL*/

方法二:通过调用SQLDriverConnect()函数连接到数据库

SQLCHAR		str[1024] = "";
SQLSMALLINT strl;
SQLHENV env;  //环境句柄   
SQLHDBC conn;  //连接句柄   
SQLRETURN ret;	//返回值
*分配环境句柄*/
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
/*设置ODBC环境属性*/
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0);
/*分配连接句柄*/
SQLAllocHandle(SQL_HANDLE_DBC, env, &conn);
	/*连接到数据源*/ 
        //如果使用odbc.ini中配置的数据源,则连接串中指定DSN=xxx,并补全其他未配置的参数即可。
ret = SQLDriverConnect(conn, NULL, (SQLCHAR*)"DSN=Test1;UserName=atlasdb;Password=atlasdb", SQL_NTS,tr, sizeof(str), &strl, SQL_DRIVER_COMPLETE);
//如果不使用odbc.ini中配置的数据源信息,则按照以下方式连接数据库即可:
ret = SQLDriverConnect(conn, NULL, (SQLCHAR*)"Driver=PostgreSQL;Servername=192.168.114.28;Port=5432;Database=atlasdb;UserName=atlasdb;Password=atlasdb", SQL_NTS,str, sizeof(str), &strl,SQL_DRIVER_COMPLETE);

关闭ODBC连接

关闭连接时调用SQLDisconnect()函数关闭数据库连接:

rc = SQLDisconnect(conn);
If (!SQL_SUCCEEDED(rc))
{
	printf("SQLDisconnect failed");
	fflush(stdout);
	exit(1);
}
rc = SQLFreeHandle(SQL_HANDLE_DBC, conn);
if (!SQL_SUCCEEDED(rc))
{
	printf("SQLFreeHandle failed");
	fflush(stdout);
	exit(1);
}
conn = NULL;
rc = SQLFreeHandle(SQL_HANDLE_ENV, env);
if (!SQL_SUCCEEDED(rc))
{
	printf("SQLFreeHandle failed");
	fflush(stdout);
	exit(1);
}
env = NULL;

连接参数

名称 缩写 类型 定义
Description string 数据源说明
Servicename string 数据源服务主机名或IP
Port int 数据库端口
Username string 数据库用户
Password string 数据库用户密码
UseDeclareFetch B6 bool 是否使用Declare和Fetch
Fetch A7 int 批量读取的最大行数
Socket A8 int Socket buffer size
ReadOnly A0 bool 数据库是否只读
MaxVarcharSize B0 int Varchar的最大长度
KeepaliveTime D1 int TCP KEEPALIVE设置:空闲时间
KeepaliveInterval D2 int TCP KEEPALIVE设置:间隔

连接参数可以在连接串中指定:

ret = SQLDriverConnect(conn, NULL, (SQLCHAR*)"Driver=PostgreSQL;Servername=192.168.114.28;Port=5411;Database=atlasdb;UserName=atlasdb;Password=atlasdb;ReadOnly=Yes;Fetch=200", SQL_NTS,
		str, sizeof(str), &strl,
		SQL_DRIVER_COMPLETE);