
# 连接数据库
连接到数据库是使用libpq开发应用程序的第一步。此时用户可以使用[PQconnectdb](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-0143.html#ZH-CN_TOPIC_0000002527987990)或[PQsetdbLogin](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-0147.html#ZH-CN_TOPIC_0000002527987992)函数来建立与数据库服务器的连接。这些函数将返回一个连接对象，用户需要保存这个连接对象，以便后续的数据库操作。
以开发源程序testlibpq.c为例（完整示例请参考[数据库建连、执行SQL并返回结果](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-1637.html#ZH-CN_TOPIC_0000002527828042)）：
```
/*
 * 说明： testlibpq.c源程序，提供libpq基本且常见的使用场景。
 * 使用libpq提供的PQconnectdb、PQexec、PQntuples、PQfinish等接口实现数据库建连，执行sql，获取返回结果以及资源清理。
 * 头文件，自定义函数请参考完整示例。
 */
/* 此处user、passwd等变量应从环境变量或配置文件读取，环境变量需用户自己按需配置；非环境变量情况下可直接赋值字符串 */
const char conninfo[1024];
PGconn     *conn;
PGresult   *res;
int         nFields;
int         i,j;
char        *passwd = getenv("EXAMPLE_PASSWD_ENV");
char        *port = getenv("EXAMPLE_PORT_ENV");
char        *host = getenv("EXAMPLE_HOST_ENV");
char        *username = getenv("EXAMPLE_USERNAME_ENV");
char        *dbname = getenv("EXAMPLE_DBNAME_ENV");
/*
 * 用户在命令行上提供了conninfo字符串的值时使用该值
 * 否则环境变量或者所有其它连接参数
 * 都使用缺省值。
 */
if (argc > 1)
    strcpy(conninfo, argv[1]);
else
    sprintf(conninfo,
    "dbname=%s port=%s host=%s application_name=test connect_timeout=5 sslmode=allow user=%s password=%s",
    dbname, port, host, username, passwd);
/* 连接数据库 */
conn = PQconnectdb(conninfo);
/* 检查后端连接成功建立 */
if (PQstatus(conn) != CONNECTION_OK)
{
    fprintf(stderr, "Connection to database failed: %s",
    PQerrorMessage(conn));
    exit_nicely(conn);
}
```
