在C语言中,对于数据库操作,常用的方式是通过ODBC驱动程序进行。而ODBC驱动程序支持的数据库种类繁多,其中包括Oracle数据库。当我们需要在C语言中查询Oracle数据库结果时,可以使用ODBC API中的SQLExecDirect函数来执行数据库查询语句,并通过SQLBindCol函数将查询结果绑定到预先分配的变量中。
以下是使用C语言中的ODBC驱动程序,查询Oracle数据库中的员工表中的所有员工记录的示例:
#include
#include
#include
SQLHENV hEnv = SQL_NULL_HENV;
SQLHDBC hDbc = SQL_NULL_HDBC;
SQLHSTMT hStmt = SQL_NULL_HSTMT;
SQLCHAR szConnStrOut[256] = {0};
SQLINTEGER iConnStrOut = 0;
SQLCHAR szQuery[] = "SELECT * FROM EMPLOYEE";
int main()
{
// 初始化ODBC环境
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc);
// 连接到Oracle数据库
SQLDriverConnect(hDbc, NULL, (SQLCHAR*)"DSN=ORCL;UID=USERNAME;PWD=PASSWORD;", SQL_NTS,
szConnStrOut, sizeof(szConnStrOut), &iConnStrOut, SQL_DRIVER_NOPROMPT);
// 执行查询语句,并将查询结果绑定到变量上
SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);
SQLExecDirect(hStmt, szQuery, SQL_NTS);
while(SQLFetch(hStmt) != SQL_NO_DATA)
{
int iEmpID = 0, iAge = 0;
char szName[256] = {0};
SQLBindCol(hStmt, 1, SQL_C_LONG, &iEmpID, 0, NULL);
SQLBindCol(hStmt, 2, SQL_C_CHAR, szName, sizeof(szName), NULL);
SQLBindCol(hStmt, 3, SQL_C_LONG, &iAge, 0, NULL);
printf("%d %s %d\n", iEmpID, szName, iAge);
}
// 释放ODBC资源
SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
SQLDisconnect(hDbc);
SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
return 0;
}
在上述代码中,我们使用了ODBC API中的SQLFetch函数来按行获取查询结果,直到获取完毕为止。在每次获取到一行结果时,我们通过SQLBindCol函数将获取的员工ID、姓名和年龄分别绑定到iEmpID、szName和iAge预分配的变量中,并通过printf函数输出结果,这样就完成了一次数据库查询操作。
需要注意的是,在连接Oracle数据库时,需要使用DSN(Data Source Name)连接方式,其指向的是数据库所在机器上的Oracle TNS Service Name。并且在进行ODBC初始化之前,需要先安装Oracle ODBC驱动程序。