c oracle连接串

2023年 8月 4日 58.8k 0

在进行C和Oracle数据库连接时,连接串是非常重要的部分。C语言中,我们可以使用Oracle提供的OCI接口来连接Oracle数据库。此外,没有理由不使用连接串的两个重要原因是:连接串提供的一个方便的方式来指定数据库,用户名和密码等细节信息,这是仅靠函数调用实现的额外控制。那么,我们该如何使用连接串来连接Oracle数据库呢?接下来我们详细说明:

首先,Oracle连接串由8个元素组成,其语法如下:

[//]host[:port][/service_name][:server][/instance_name]

下面对各元素进行解释:

  • //:表示该服务器是一个远程数据库服务器;
  • host:用于指定数据库所在的机器名称或IP地址;
  • port:连接到远程数据库服务器的端口号。默认端口号1521;
  • service_name:表示在该主机上运行的ORACLE实例名;
  • server:服务名;
  • instance_name:实例名;

下面我们举个实际连接的例子,假设我们有一个Oracle数据库运行在IP地址为192.168.0.1的机器上,信息如下:

  • 主机名称:dbhost1
  • 数据库服务名:ORCL
  • 监听端口号:1521

那么连接串应该为:

"192.168.0.1:1521/ORCL"

下面是使用OCI函数来创建一个数据库连接:

OCIEnv *envhp; /* OCI environment handle */
OCIServer *srvhp; /* OCI server handle */
OCIError *errhp; /* OCI error handle */
OCISession *sesnhp; /* OCI session handle */
text *username = (text *)"scott"; /* database user name */
text *password = (text *)"tiger"; /* database user password */
text *connect_string = (text *)"192.168.0.1:1521/ORCL"; /* connection string */
/* Initialize OCI environment */
OCIEnvCreate(&envhp, (ub4)OCI_DEFAULT, (dvoid *)0,
(dvoid * (*)(dvoid *,size_t))0,
(dvoid * (*)(dvoid *,dvoid *,size_t))0,
(void (*)(dvoid *,dvoid *))0,
(size_t)0, (dvoid **)0);
/* Create OCI server handle */
OCIHandleAlloc((dvoid *)envhp, (dvoid **)&srvhp,
(ub4)OCI_HTYPE_SERVER, (size_t)0, (dvoid **)0);
/* Create OCI error handle */
OCIHandleAlloc((dvoid *)envhp, (dvoid **)&errhp,
(ub4)OCI_HTYPE_ERROR, (size_t)0, (dvoid **)0);
/* Attach the server handle to the server */
OCIServerAttach(srvhp, errhp,
(text *)connect_string, strlen((char *)connect_string),
(ub4)OCI_DEFAULT);
/* Create OCI session handle */
OCIHandleAlloc((dvoid *)envhp, (dvoid **)&sesnhp,
(ub4)OCI_HTYPE_SESSION, (size_t)0, (dvoid **)0);
/* Set the username and password */
OCIAttrSet((dvoid *)sesnhp, (ub4)OCI_HTYPE_SESSION,
(dvoid *)username, (ub4)strlen((char *)username),
OCI_ATTR_USERNAME, errhp);
OCIAttrSet((dvoid *)sesnhp, (ub4)OCI_HTYPE_SESSION,
(dvoid *)password, (ub4)strlen((char *)password),
OCI_ATTR_PASSWORD, errhp);
/* Begin Session */
OCISessionBegin(envhp, errhp, sesnhp, (ub4)OCI_CRED_RDBMS,
(ub4)OCI_DEFAULT);
/* Set the session in the server */
OCIAttrSet((dvoid *)srvhp, (ub4)OCI_HTYPE_SERVER,
(dvoid *)sesnhp, (ub4)0,
(ub4)OCI_ATTR_SESSION, errhp);

如上例所示,我们首先创建一个OCI环境句柄(OCIEnv),然后用该句柄创建一个OCI服务器句柄 (OCIServer)和一个OCI错误句柄 (OCIError)。接着,我们调用 OCIServerAttach 函数来连接远程ORACLE服务器。如果连接成功,连接字符串包含的数据库服务名 ORCL 将被赋给服务器句柄。然后,我们创建一个OCI会话句柄(OCISession)并将其与USR 和PWD参数指定的用户和密码相关联,接着调用 OCISessionBegin 函数开始会话。最后,我们通过 OCIAttrSet 函数将会话句柄(OCISession)和上下文句柄(OCIServer)相关联,最后我们就可以使用OCIStmtPrepare、OCIStmtExecute、OCIFetch 等函数执行相应的SQL语句了。

总之,在使用OCI连接Oracle数据库时,连接串是一个非常重要的部分。我们需要按照上述语法规则正确配置连接串。然后使用OCI接口函数来创建连接、会话等句柄,获取需要的SQL语句执行结果。希望本文对于想要学习OCI连接Oracle的开发者们有所帮助。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论