利用C语言从Oracle数据库中输出表格(c 输出oracle表格)
利用C语言从Oracle数据库中输出表格
在实际的开发工作中,我们有时需要从Oracle数据库中快速地输出某个表格的数据信息,这时候,我们可以借助于C语言的编程能力来实现这个目标。本文将介绍如何利用C语言编写代码,从Oracle数据库中输出某个表格的数据信息。
一、连接Oracle数据库
我们需要在C语言代码中建立与Oracle数据库的连接。可以使用Oracle自带的OCI库来完成这个任务。以下是建立连接的代码样例:
“`c
#include
#include
#include
void mn()
{
/* 声明变量 */
OCIEnv *envhp; /* 环境变量句柄 */
OCIError *errhp; /* 错误句柄 */
OCIServer *srvhp; /* 服务器句柄 */
OCISession *usrhp; /* 用户句柄 */
OCIStmt *stmthp; /* 语句句柄 */
OCIResult *rssth; /* 结果句柄 */
sword status; /* 返回值状态 */
char *user = “用户名”; /* 用户名 */
char *passwd = “密码”; /* 密码 */
char *dbname = “Oracle连接名”; /* 数据库名 */
char sql[200] = “SELECT * FROM 表名”; /* SQL语句 */
/* 初始化环境 */
OCIInitialize(OCI_DEFAULT);
OCIEnvInit(&envhp, OCI_DEFAULT);
/* 创建错误句柄 */
OCIHandleAlloc(envhp, (void **)&errhp, OCI_HTYPE_ERROR, 0, NULL);
/* 创建服务器句柄 */
OCIHandleAlloc(envhp, (void **)&srvhp, OCI_HTYPE_SERVER, 0, NULL);
/* 创建用户句柄 */
OCIHandleAlloc(envhp, (void **)&usrhp, OCI_HTYPE_SESSION, 0, NULL);
/* 连接Oracle数据库 */
OCIServerAttach(srvhp, errhp, (text *)dbname, strlen((char *)dbname), OCI_DEFAULT);
OCIAttrSet(usrhp, OCI_HTYPE_SESSION, (text *)user, strlen(user), OCI_ATTR_USERNAME, errhp);
OCIAttrSet(usrhp, OCI_HTYPE_SESSION, (text *)passwd, strlen(passwd), OCI_ATTR_PASSWORD, errhp);
OCISessionBegin(srvhp, errhp, usrhp, OCI_CRED_RDBMS, OCI_DEFAULT);
/* 创建语句句柄 */
OCIHandleAlloc(envhp, (void **)&stmthp, OCI_HTYPE_STMT, 0, NULL);
/* 执行SQL语句 */
OCIStmtPrepare(stmthp, errhp, (text *)sql, strlen(sql), OCI_NTV_SYNTAX, OCI_DEFAULT);
OCIStmtExecute(srvhp, stmthp, errhp, 0, 0, NULL, NULL, OCI_DEFAULT);
/* 释放资源 */
OCIStmtRelease(stmthp, errhp, NULL, 0, NULL);
OCISessionEnd(srvhp, errhp, usrhp, OCI_DEFAULT);
OCIServerDetach(srvhp, errhp, OCI_DEFAULT);
OCIHandleFree(srvhp, OCI_HTYPE_SERVER);
OCIHandleFree(errhp, OCI_HTYPE_ERROR);
OCIHandleFree(usrhp, OCI_HTYPE_SESSION);
OCIHandleFree(envhp, OCI_HTYPE_ENV);
/* 结束环境 */
OCIUninitialize();
}
在这段代码中,我们使用了OCI库中的一些重要函数,这些函数就是建立Oracle数据库连接的核心。其中,通过OCIServerAttach函数可以连接到Oracle数据库,接下来使用OCISessionBegin函数验证我们的登录信息。然后,使用OCIStmtPrepare函数准备SQL语句,然后使用OCIStmtExecute函数执行SQL语句。
二、输出表格数据
接下来,我们开始输出我们需要查询的表格数据信息。以下是输出表格数据的代码样例:
```cwhile (OCIStmtFetch2(stmthp, errhp, 1, OCI_FETCH_NEXT, 0, OCI_DEFAULT) == OCI_SUCCESS)
{ printf("%-20s %-20s %-20s\n",
col1, col2, col3 /* 这里根据表格列数进行设置 */);}
这里使用while循环不断地执行OCIStmtFetch2函数,直到取完所有结果数据为止。每次获取结果数据后,我们都会将结果输出到控制台上。
三、完整代码
为了方便大家的学习和实际工作运用,我们将完整的C语言代码示例给出,供大家参考:
“`c
#include
#include
#include
void mn()
{
/* 声明变量 */
OCIEnv *envhp; /* 环境变量句柄 */
OCIError *errhp; /* 错误句柄 */
OCIServer *srvhp; /* 服务器句柄 */
OCISession *usrhp; /* 用户句柄 */
OCIStmt *stmthp; /* 语句句柄 */
OCIResult *rssth; /* 结果句柄 */
sword status; /* 返回值状态 */
char *user = “用户名”; /* 用户名 */
char *passwd = “密码”; /* 密码 */
char *dbname = “连接名”; /* 数据库名 */
char sql[200] = “SELECT * FROM 表名”; /* SQL语句 */
/* 初始化环境 */
OCIInitialize(OCI_DEFAULT);
OCIEnvInit(&envhp, OCI_DEFAULT);
/* 创建错误句柄 */
OCIHandleAlloc(envhp, (void **)&errhp, OCI_HTYPE_ERROR, 0, NULL);
/* 创建服务器句柄 */
OCIHandleAlloc(envhp, (void **)&srvhp, OCI_HTYPE_SERVER, 0, NULL);
/* 创建用户句柄 */
OCIHandleAlloc(envhp, (void **)&usrhp, OCI_HTYPE_SESSION, 0, NULL);
/* 连接Oracle数据库 */
OCIServerAttach(srvhp, errhp, (text *)dbname, strlen((char *)dbname), OCI_DEFAULT);
OCIAttrSet(usrhp, OCI_HTYPE_SESSION, (text *)user, strlen(user), OCI_ATTR_USERNAME, errhp);
OCIAttrSet(usrhp, OCI_HTYPE_SESSION, (text *)passwd, strlen(passwd), OCI_ATTR_PASSWORD, errhp);
OCISessionBegin(srvhp, errhp, usrhp, OCI_CRED_RDBMS, OCI_DEFAULT);
/* 创建语句句柄 */
OCIHandleAlloc(envhp, (void **)&stmthp, OCI_HTYPE_STMT, 0, NULL);
/* 执行SQL语句 */
OCIStmtPrepare(stmthp, errhp, (text *)sql, strlen(sql), OCI_NTV_SYNTAX, OCI_DEFAULT);
OCIStmtExecute(srvhp, stmthp, errhp, 0, 0, NULL, NULL, OCI_DEFAULT);
/* 输出表格数据 */
while (OCIStmtFetch2(stmthp, errhp, 1, OCI_FETCH_NEXT, 0, OCI_DEFAULT) == OCI_SUCCESS)
{
printf(“%-20s %-20s %-20s\n”,
col1, col2, col3/* 这里根据表格列数进行设置 */);
}
/* 释放资源 */
OCIStmtRelease(stmthp, errhp, NULL, 0, NULL);
OCISessionEnd(srvhp, errhp, usrhp, OCI_DEFAULT);
OCIServerDetach(srvhp, errhp, OCI_DEFAULT);
OCIHandleFree(srvhp, OCI_HTYPE_SERVER);
OCIHandleFree(errhp, OCI_HTYPE_ERROR);
OCIHandleFree(usrhp, OCI_HTYPE_SESSION);
OCIHandleFree(envhp, OCI_HTYPE_ENV);
/* 结束环境 */
OCIUninitialize();
}
这就是从Oracle数据库中输出表格数据的详细步骤和C语言代码示例。相信大家在掌握了这些知识后,能在实际开发工作中更加得心应手。