在C语言中,与数据库的链接是常见的操作。Oracle数据库也是企业级应用中常用的数据库之一。本文将介绍如何在C语言中测试Oracle数据库的链接。
在使用C语言链接Oracle数据库之前,需要确保已经正确安装Oracle Instant Client。在Linux系统下的安装可参考以下命令:
sudo apt-get install libaio1
sudo apt-get install unzip
unzip instantclient-basic-linux.x64-18.5.0.0.0dbru.zip -d /opt/
unzip instantclient-sdk-linux.x64-18.5.0.0.0dbru.zip -d /opt/
其中,instantclient-basic-linux.x64-18.5.0.0.0dbru.zip和instantclient-sdk-linux.x64-18.5.0.0.0dbru.zip为Oracle官网下载的安装包,-d后面的路径为解压路径。
接下来就可以进入C语言编写测试代码。以下代码为一个测试程序,包括了链接数据库、查询数据和关闭链接的操作:
#include#include#includeint main() {
OCIEnv *envhp;
OCIError *errhp;
OCIServer *srvhp;
OCISession *usrhp;
OCIStmt *stmthp;
OCIDefine *defhp;
char *host = "localhost"; // 主机名
char *user = "test"; // 用户名
char *password = "test"; // 密码
int port = 1521; // 端口
char *db_name = "test"; // 数据库名
char query[1000] = "SELECT * FROM test_table";
OCIInitialize(OCI_DEFAULT, NULL, NULL, NULL, NULL);
OCIEnvCreate(&envhp, OCI_DEFAULT, NULL, NULL, NULL, NULL, 0, NULL);
OCIHandleAlloc(envhp, (void **) &errhp, OCI_HTYPE_ERROR, 0, NULL);
OCIHandleAlloc(envhp, (void **) &srvhp, OCI_HTYPE_SERVER, 0, NULL);
OCIServerAttach(srvhp, errhp, (OraText *) host, strlen(host), OCI_DEFAULT);
OCIHandleAlloc(envhp, (void **) &usrhp, OCI_HTYPE_SESSION, 0, NULL);
OCISessionBegin(srvhp, errhp, usrhp, OCI_CRED_RDBMS, OCI_DEFAULT);
OCIHandleAlloc(envhp, (void **) &stmthp, OCI_HTYPE_STMT, 0, NULL);
OCIStmtPrepare(stmthp, errhp, (OraText *) query, strlen(query), OCI_NTV_SYNTAX, OCI_DEFAULT);
OCIStmtExecute(srvhp, stmthp, errhp, 1, 0, NULL, NULL, OCI_DEFAULT);
int id;
char name[20];
while (OCIStmtFetch2(stmthp, errhp, 1, OCI_DEFAULT, 0, OCI_DEFAULT) == OCI_SUCCESS) {
OCIAttrGet(stmthp, OCI_HTYPE_STMT, &id, 0, OCI_ATTR_ROWID, errhp);
OCIAttrGet(stmthp, OCI_HTYPE_STMT, &name, 0, OCI_ATTR_NAME, errhp);
printf("id: %d, name: %s\n", id, name);
}
OCIStmtRelease(stmthp, errhp, NULL, 0, OCI_DEFAULT);
OCISessionEnd(srvhp, errhp, usrhp, OCI_DEFAULT);
OCIServerDetach(srvhp, errhp, OCI_DEFAULT);
OCIHandleFree(envhp, OCI_HTYPE_SERVER);
OCIHandleFree(envhp, OCI_HTYPE_SESSION);
OCIHandleFree(envhp, OCI_HTYPE_ERROR);
OCIHandleFree(envhp, OCI_HTYPE_ENV);
return 0;
}
以上代码中,host、user、password、port和db_name分别为数据库链接所需的基本信息。query为查询语句,包含了从test_table表中选取全部数据的操作。
在编译执行代码之前,需要在编译命令中链接Oracle Instant Client库,命令如下:
gcc -o test test.c -Wall -I/opt/instantclient_18_5/ -L/opt/instantclient_18_5/ -locci -lclntsh
其中,/opt/instantclient_18_5/为Oracle Instant Client的安装路径,-locci和-lclntsh为链接库。
执行测试程序后,即可得到查询出的数据。
以上就是C语言中测试Oracle链接的步骤和代码实现。通过以上代码示例,我们可以体会到C语言操作Oracle数据库的便捷之处,同时对于C语言的相关知识也有更加清晰的认识。