在C语言中,连接Oracle数据库是一个非常常见的需求。而在Oracle数据库中使用C语言连接的方法也有很多种,例如OCI、ODBC等。本文将主要介绍如何使用OCI进行C语言与Oracle数据库的连接。
先给出一个简单的示例:在C语言中连接Oracle数据库,需要引入oci头文件以及ORACLE_HOME目录下的oci库文件。其中oci的头文件包括:
#include#include#include
而oci库文件则包括:
/lib/libclntsh.so # for linux
\bin\oci.dll # for windows
其中
是Oracle数据库安装路径。以Linux系统为例,如果ORACLE_HOME在/opt下,那么库文件路径将是/opt/oracle/product/11.2.0/db_1/lib/libclntsh.so。
下面是一个简单的示例代码,用于连接数据库:
int main()
{
OCIEnv* envhp;
OCIError* errhp;
OCISvcCtx* svchp;
OCIStmt* stmthp;
OCIServer* srvhp;
char username[20];
char password[20];
char dbstring[20];
// 初始化环境
OCIInitialize(OCI_DEFAULT, NULL, NULL, NULL, NULL);
// 创建环境句柄
OCIEnvCreate(&envhp, OCI_THREADED, NULL, NULL, NULL, NULL, 0, NULL);
// 创建错误句柄
OCIHandleAlloc((dvoid*) envhp, (dvoid**) &errhp, OCI_HTYPE_ERROR, 0, NULL);
// 创建服务器句柄
OCIHandleAlloc((dvoid*) envhp, (dvoid**) &srvhp, OCI_HTYPE_SERVER, 0, NULL);
// 设置服务器名称和用户名/密码
printf("Input server name:");
scanf("%s", dbstring);
printf("Input username:");
scanf("%s", username);
printf("Input password:");
scanf("%s", password);
OCIServerAttach(srvhp, errhp, (text*) dbstring, strlen(dbstring), OCI_DEFAULT);
OCIAttrSet((dvoid*) svchp, OCI_HTYPE_SERVER, (dvoid*) srvhp, 0, OCI_ATTR_SERVER, errhp);
// 创建服务上下文句柄
OCIHandleAlloc((dvoid*) envhp, (dvoid**) &svchp, OCI_HTYPE_SVCCTX, 0, NULL);
OCIAttrSet((dvoid*) svchp, OCI_HTYPE_SVCCTX, (dvoid*) srvhp, 0, OCI_ATTR_SERVER, errhp);
// 分配语句句柄
OCIHandleAlloc((dvoid*) envhp, (dvoid**) &stmthp, OCI_HTYPE_STMT, 0, NULL);
// 执行SQL query,比如查询表
OCIStmtPrepare(stmthp, errhp, (text*) "select * from my_table", strlen("select * from my_table"), OCI_NTV_SYNTAX, OCI_DEFAULT);
OCIStmtExecute(svchp, stmthp, errhp, 0, 0, NULL, NULL, OCI_DEFAULT);
// 释放所有句柄
OCIHandleFree((dvoid*) svchp, OCI_HTYPE_SVCCTX);
OCIHandleFree((dvoid*) srvhp, OCI_HTYPE_SERVER);
OCIHandleFree((dvoid*) errhp, OCI_HTYPE_ERROR);
OCIHandleFree((dvoid*) envhp, OCI_HTYPE_ENV);
return 0;
}
在上述代码中,首先需要初始化环境,然后依次创建环境句柄、错误句柄、服务器句柄、服务上下文句柄、语句句柄,并设置服务器、用户名和密码等信息。接着可以执行相应的SQL语句,最后需要释放所有的句柄。
除了上述示例代码中用到的函数之外,OCI还有很多其他的使用方法,例如执行SQL update操作、获取结果集等。因此,在使用OCI连接Oracle数据库时,需要仔细阅读相关文档,了解具体的API函数及其使用方法。