连接字符串¶
格式:“用户名/密码@主机名:端口/数据库名”
例:sysdba/szoscar55@127.0.0.1:2003/OSRDB
设置ACI属性
在连接字符串中,还可以设置ACI支持的属性,这些属性会影响ACI的工作模式。
设置方式为在连接字符串末尾位置添加“?”问号作为标志位,格式如下:
sysdba/szoscar55@127.0.0.1:2003/OSRDB**[?paraName1=paraVal#paraName2=paraVal]**
paraName1=paraVal 为ACI参数名称和参数值,中间用等号连接;如果想设置多个参数,多个参数之间用分号“;”间隔;
示例:
sysdba/szoscar55@127.0.0.1:2003/OSRDB?dbtext_max_len=100000;fetch_size=100;call_timeout=55
备注:可设置的ACI选项可参考:《ACI (C/C++)程序员开发手册-->ACI编程概述-->参数配置文件-->参数说明》 中的参数及参数功能描述。
打开数据库¶
使用sql.Open()函数打开由数据库驱动程序名称和特定于驱动程序的数据源名称指定的数据库。
sql.Open()函数的第一个参数是驱动名称,是驱动程序向database/sql注册的字符串标识,go-aci为“aci”;第二个参数是连接字符串。
sql.Open()函数返回 *DB 句柄,连接是线程安全的,多个用户可以同时共享一个连接,但这可能会降低性能。sql.Open() 函数只调用一次,很少有必要关闭DB,在程序结束前使用sql.Close()关闭即可。
sql.Open() 会验证参数,特别是连接字符串,连接字符串不完整会报错。若要验证数据源名称是否有效,请调用 sql.Ping() 立即返回一个连接,然后检查错误信息。
连接池配置¶
database/ sql包中有一个基本的连接池, 特性如下:
- 连接池意味着在一个数据库上执行两个连续的语句可能会打开两个连接并分别执行它们。对于开发者来说,可能会碰到一下异常表现,例如, 第INSERT的LOCK TABLES操作可能会阻塞,因为INSERT位于不持有表锁的连接上(其他连接可能已经拥有了表锁)。
- 如果连接池中没有空闲的连接,会创建新的连接;
- 默认情况下,连接数量没有限制。 如果尝试一次执行很多操作,则可以创建任意数量的连接。 这可能导致数据库返回错误,例如“连接过多”;
- 在Go 1.1或更高版本中,可以使用db.SetMaxIdleConns(N)限制池中空闲连接的数量。 不过,这并不限制池的大小;小于等于0表示不保留空闲连接。
- 连接可以快速回收。 使用db.SetMaxIdleConns(N)设置大量的空闲连接可以减少这种混乱,并有助于保持连接可重复使用;
- 在Go 1.2.1或更高版本中,可以使用db.SetMaxOpenConns(N)限制到数据库的总打开连接数。 不幸的是,死锁错误(修复程序)使db.SetMaxOpenConns(N)无法在1.2中安全使用;N小于等于0表示无限制。
- 长时间保持连接空闲会导致问题。 比如数据库参数SESSION_TIMEOUT设置为60,则当一个连接空闲60秒后,则会被数据库是否即失效,无法进行数据库操作,如果由于连接空闲时间太长而导致连接超时,请尝试db.SetMaxIdleConns(0);
- 可以通过设置db.SetConnMaxLifetime(duration)来指定可重用连接的最长时间,因为重用寿命长的连接可能会导致网络问题。 这会延迟关闭未使用的连接,即可能会延迟关闭过期的连接,但这个时间必须小于数据库后台参数的SESSION_TIMEOUT的值,否则会使用已经断开的连接;单位纳秒,小于等于0表示不会因为生存时间关闭。
- 使用DB.SetConnMaxIdleTime() 函数设置连接空闲的最大时间,单位纳秒,如果小于等于0表示不会因空闲关闭。
连接关闭¶
调用sql.Close进行连接的关闭操作。连接不建议频繁open和close,尽量将连接保持较长的使用周期,可以将连接对象传入子对象进行数据库操作,而不是在子对象中重新创建新的连接。频繁开启和关闭连接会降低程序性能。
安全连接¶
go-aci依赖aci驱动,aci驱动支持了ssl安全通信,且可以通过连接字符串设置,因此go-aci也可以在连接字符串设置ssl通信相关配置,多个参数之间用“;”间隔,比如:
sysdba/szoscar55@127.0.0.1:2003/OSRDB?ssl_wallet_enable=1;ssl_wallet_path=/opt/wallet/;ssl_wallet_pwd=szoscar55$
详细可以设置的参数,可参考 《ACI (C/C++)程序员开发手册-->ACI编程概述-->参数配置文件-->参数说明》 中的参数及参数功能描述。