- 关键字:ODBC、人大金仓、KingbaseES
- 概述
ODBC中不同的连接参数代表不同的含义,例如:设置“BatchInsertSize_Ext=1”意味着开启批量DML的功能,“Lie=1”表示启用接口SQLBrowseConnect、SQLColumnPrivileges、SQLDescribeParam、SQLGetDescRec。因此我们在实际使用ODBC时,需要根据不用的应用场景而设置不同的连接参数,从而启用相应的功能。
在Linux中,用于连接数据源的接口有:SQLConnect、SQLDriverConnect、SQLBrowseConnect。除SQLConnect直接使用(数据源名、用户名与密码)外,另外两个接口连接数据源时会用到连接字符串。连接字符串包含用于建立连接的信息,完整的连接字符串包含建立连接所需的所有信息,连接字符串是一系列用分号分隔的“关键字=值”。SQLDriverConnect是通过与用户交互完成连接字符串,SQLBrowseConnect使用数据源以迭代的方式完成连接字符串。
SQLConnect接口为固定使用数据源名、用户名与密码来连接数据源。如下,在应用程序分配环境与连接句柄(hdbc)之后,使用用户名“system”和密码“123”连接到数据源“kingbase”:
SQLConnect(hdbc, (SQLCHAR *)”kingbase”, SQL_NTS, (SQLCHAR *)”system”, SQL_NTS, (SQLCHAR *)”123”, SQL_NTS);
SQLDriverConnect在连接串中除了必须设定 DSN 或 DRIVER 以及 Username(uid),Password(pwd),Database 等连接属性外,还可以设置扩展连接属性。设定的选项值将对该连接上的所有语句有效,但部分选项的值可通过设置连接属性或语句属性来改变,从而使这里设定的选项值失效而改用新设置的选项值。扩展属性参见《KingbaseES客户端编程接口指南-ODBC》中6.2章节“Linux 环境下 SQLDriverConnect() 连接串中KingbaseES ODBC 的扩展连接属性“。
Linux系统中设置字符串的方式主要有两种:一种是在数据源配置文件“odbc.ini”文件中设置;另一种是在使用SQLDriverConnect接口调用连接串时增加相应的属性与值。若在“odbc.ini”配置文件中设置属性后,便不需在调用SQLDriverConnect接口时再次构造连接串。而在Windows系统中,有KingbaseES ODBC数据源配置工具,从而不用手动在odbc.ini”文件中进行属性的添加,选择其中“高级设置-数据源”便可进行扩展属性设置,如下所示:
调用SQLDriverConnect接口连接数据源示例如下,首先定义一个连接串“str”,该连接串中的内容可以根据需要而进行扩展,形式为“关键字=值”,使用“;”来分隔开不同的属性。构造数据源为“kingbase8”,用户为“system”,密码为“123”,扩展属性包含使用服务器端游标时结果集在客户端可缓存的最大元组数“100”,设置连接数据库时是不以只读的方式“NO”:
str::DSN=kingbase8;UID=system;PWD=123;Fetch=100;ReadOnly=NO;
同样应用程序分配环境与连接句柄(hdbc)之后便可调用SQLDriverConnect接口:
SQLDriverConnect(conn, NULL, (SQLCHAR*)str, SQL_NTS, outstr, sizeof(outstr), &outstrptr,SQL_DRIVER_COMPLETE);
其中“outstr”为指向已完成连接字符串的缓冲区指针。“outstrptr”为记录返回总字符数的缓冲区。
SQLBrowseConnect支持一种迭代方法,用于发现和枚举连接到数据源需要的连接参数。枚举所有参数后,SQLBrowerConnect将完成与数据源的连接,并返回完整的连接字符串。当首次在连接上调用 SQLBrowseConnect 时,浏览请求连接字符串必须包含 DSN 关键字或 DRIVER 关键字,其中DSN与DRIVER属于一级连接属性。在使用一级连接属性加载驱动后,会返回二级连接属性(Servername、Port、UID、PWD),在应用程序补充完二级连接属性后再次调用SQLBrowseConnect。而后SQLBrowseConnect会返回所需的三级连接属性(Database、UseServerSidePrepare、UseDeclareFetch、MaxVarcharSize、MaxLongVarcharSize、Fetch),SQLBrowseConnect在获取到三级连接属性后会建立完整的连接,而后返回所有的连接属性与对应的值。
如下应用程序分配环境与连接句柄(hdbc)使用SQLBrowseConnect进行连接:
SQLBrowseConnect(hdbc, szConnStrIn, SQL_NTS, szConnStrOut, BRWS_LEN, &cbConnStrOut);
定义“szConnStrIn”字符数组用以保存浏览请求连接的字符串,“szConnStrOut”字符数组用以保存浏览结果连接的字符串。“BRWS_LEN”定义“szConnStrOut”字符数组缓冲区的长度,“cbConnStrOut”保存在“szConnStrOut”返回的字符总数。首先设置szConnStrIn为"DSN=kingbase8"后第一次调用SQLBrowseConnect接口。szConnStrOut中会返回“Servername=?;Port=?;UID=?;PWD=?”,根据样例设置szConnStrIn为”Servername=10.10.12.252;Port=65432;UID=system;PWD=123;”,而后进行第二次调用SQLBrowseConnect接口。第二次调用结束后szConnStrOut中会返回“Database={kingbase,security,test}UseServerSidePrepare={0,1};UseDeclareFetch={0,1};MaxVarcharSize=?;MaxLongVarcharSize=?;Fetch=?”,从而根据样例给szConnStrIn赋值为“Database=kingbase;UseServerSidePrepare=0;UseDeclareFetch=1;MaxVarcharSize=1;MaxLongVarcharSize=0;Fetch=5”后再进行第三次调用SQLBrowseConnect接口。调用结束后会在szConnStrOut中会返回上述所有进行设置的连接属性。至此,使用SQLBrowseConnect接口进行浏览连接数据源便结束。
参考资料
提供该题目相关内容在产品手册中可以系统学习的位置,例如: