更新时间:2024-11-12 GMT+08:00
分享

连接数据库

使用如下语句连接数据库:

EXEC SQL CONNECT TO target [AS connection-name] [USER user-name];
target可以通过如下方法声明,斜体部分为变量,请根据实际情况进行修改:
  • dbname[@hostname][:port]
  • tcp:gaussdb://hostname[:port][/dbname][?options]
  • unix:gaussdb://hostname[:port][/dbname][?options]
  • 一个包含上述形式之一的SQL字符串

ecpg支持IPv6格式,需要hostname两边添加[]。IPv6格式示例如下:

db1@[::1]
db1@[::1]:5432
tcp:gaussdb://[::1]/db1
tcp:gaussdb://[::1]:5432/db1
unix:gaussdb://[::1]/db1
unix:gaussdb://[::1]:5432/db1

目前ecpg支持的IPv6格式如下:

  • 简写大写格式
  • 简写小写格式
  • 非简写大写格式
  • 非简写小写格式

IPv6的回环地址为::1或者0:0:0:0:0:0:0:1,因此unix协议在IPv6下只支持这两种格式。

声明连接用户名的方法有以下方式:
  • username/password
  • username SQLIDENTIFIED BY password
  • username USING password

如上所述,参数username以及password可以是一个SQL标识符、一个SQL字符串或一个对字符变量的引用。

connection_name表示连接名,如果一个程序只使用一个连接,则可以省略它。最近打开的连接成为当前连接。

简单示例如下所示:
#include <stdlib.h>
EXEC SQL CONNECT TO mydb@sql.mydomain.com;  

EXEC SQL CONNECT TO unix:gaussdb://sql.mydomain.com/mydb AS myconnection USER username;  

EXEC SQL BEGIN DECLARE SECTION; 
/* 此处target、user、passwd应从环境变量或配置文件读取,环境变量需用户自己按需配置;非环境变量情况下可直接赋值字符串 */
const char *target = getenv("EXAMPLE_TARGET_ENV"); 
const char *user = getenv("EXAMPLE_USERNAME_ENV"); 
const char *passwd = getenv("EXAMPLE_PASSWD_ENV"); 
EXEC SQL END DECLARE SECTION;  
... 
EXEC SQL CONNECT TO :target USER :user USING :passwd; 
/* 或者 EXEC SQL CONNECT TO :target USER :user/:passwd; */

完整使用示例,请参见CONNECT中的“连接语法使用示例”。

  • 最后一种形式引用了字符变量,在宿主变量中将介绍如何在SQL语句中引用C语言变量。
  • 连接目标的格式未在SQL标准中说明,因此若要开发可移植的应用,可使用上述最后一个例子的方法将连接目标字符串封装在某个变量里。
  • ecpg兼容性请参见ecpg兼容
  • 若连接语句中指定了ip-port,则必须指定username/password,该规则由GaussDB Kernel内核通信认证所决定。若不指定ip-port,则通过本地$PGPORT(UDS协议)进行通信。
  • 若客户连接时使用SSL安全协议,则需要使用tcp:gaussdb://hostname[:port][/dbname][?options]连接格式,在options选项中配置sslmode=disable\require。

相关文档