当前位置:首页 > 行业动态 > 正文

c 数据库oracle

Oracle数据库是一种广泛使用的关系型数据库管理系统,由Oracle公司开发和维护。它支持SQL语言,具有高性能、高可靠性和可扩展性等特点。

在C语言中连接Oracle数据库,主要有以下几种方法:

一、使用OCI(Oracle Call Interface)

1、安装和配置:首先需要安装Oracle客户端并配置环境变量,如ORACLE_HOMELD_LIBRARY_PATH

2、初始化OCI环境:在程序中创建OCI环境句柄,为后续的数据库操作做准备。

   OCIEnv *env;
   OCIError *err;
   OCIHandleAlloc(NULL, (dvoid **)&env, OCI_DEFAULT, 0, NULL);
   OCIHandleAlloc(env, (dvoid **)&err, OCI_HTYPE_ERROR, 0, NULL);

3、连接数据库:使用OCI函数连接到Oracle数据库,指定用户名、密码和服务名等信息。

   OCISvcCtx *svc;
   OCIServerDetach(svc, err, 0, 0, OCI_DEFAULT);
   OCILogon(env, err, &svc, "username", strlen("username"), "password", strlen("password"), "dbname", strlen("dbname"));

4、执行SQL语句:准备SQL语句,分配必要的资源,然后执行,例如查询数据:

   OCIStmt *stmt;
   OCIHandleAlloc(env, (dvoid **)&stmt, stmt, 0, NULL);
   OCIStmtPrepare(stmt, err, (OraText *)"SELECT * FROM mytable", strlen((char *)"SELECT * FROM mytable"), OCI_NTV_SYNTAX, OCI_DEFAULT);

5、处理结果集:如果有查询结果,需要处理结果集,获取数据。

6、清理资源:在程序结束前,释放所有分配的资源,包括句柄等。

   OCIHandleFree(stmt, OCI_HTYPE_STMT);
   OCIHandleFree(svc, OCI_HTYPE_SVCCTX);
   OCIHandleFree(err, OCI_HTYPE_ERROR);
   OCIHandleFree(env, OCI_HTYPE_ENV);

二、使用ODBC(Open Database Connectivity)

1、安装和配置ODBC驱动程序:安装ODBC驱动程序,并配置数据源名称(DSN),以便能够连接到Oracle数据库。

2、初始化ODBC环境:在程序中初始化ODBC环境,分配必要的资源。

   SQLHENV env;
   SQLHDBC dbc;
   SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
   SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
   SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);

3、连接数据库:使用ODBC函数连接到数据库,指定DSN、用户名和密码等信息。

   SQLCHAR dsn[] = "mydsn";
   SQLDriverConnect(dbc, NULL, (SQLCHAR*)"DSN=mydsn;UID=username;PWD=password;", SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);

4、执行SQL语句:准备并执行SQL语句,获取结果,例如执行查询:

   SQLHSTMT stmt;
   SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
   SQLExecDirect(stmt, (SQLCHAR*)"SELECT * FROM mytable", SQL_NTS);

5、处理结果集:处理查询结果,获取数据。

   SQLCHAR result[100];
   while (SQLFetch(stmt) == SQL_SUCCESS) {
       SQLGetData(stmt, 1, SQL_C_CHAR, result, sizeof(result), NULL);
       printf("%s
", result);
   }

6、清理资源:释放所有分配的资源,包括句柄等。

   SQLFreeHandle(SQL_HANDLE_STMT, stmt);
   SQLDisconnect(dbc);
   SQLFreeHandle(SQL_HANDLE_DBC, dbc);
   SQLFreeHandle(SQL_HANDLE_ENV, env);

三、使用Pro*C预编译器

1、**安装和配置Pro*C**:安装Oracle提供的Pro*C预编译器,并配置Oracle客户端环境。

2、编写嵌入SQL的C程序:在C程序中直接嵌入SQL语句,使用EXEC SQL关键字来标识SQL代码段。

   #include <stdio.h>
   #include <stdlib.h>
   EXEC SQL BEGIN DECLARE SECTION;
   VARCHAR user[20], pass[20], tnsname[20];
   int empno;
   char ename[20];
   EXEC SQL END DECLARE SECTION;
   int main() {
       strcpy(user.arr,"umail");
       user.len=(unsigned short)strlen((char *)user.arr);
       strcpy(pass.arr,"umail");
       pass.len=(unsigned short)strlen((char *)pass.arr);
       strcpy(tnsname.arr,"umail");
       tnsname.len=(unsigned short)strlen((char *)tnsname.arr);
       EXEC SQL CONNECT :user IDENTIFIED BY :pass USING :tnsname;
       EXEC SQL declare emp_cursor cursor for select id, ename from umail.tt1;
       EXEC SQL open emp_cursor;
       EXEC SQL WHENEVER NOT FOUND DO break;
       while(1) {
           EXEC SQL fetch emp_cursor into :empno, :ename;
           if (sqlca.sqlcode != 0) break;
           printf("the empno %d's name is %s
", empno, ename);
       }
       EXEC SQL close emp_cursor;
       EXEC SQL commit work release;
       return 0;
   }

3、编译和链接程序:使用Pro*C编译器对C程序进行预处理,生成可执行文件。

   proc test.pc
   gcc -o test test.c -lclntsh

在C语言中连接Oracle数据库可以通过多种方式实现,每种方法都有其特点和适用场景,开发人员可以根据具体需求和项目环境选择合适的方法来连接和操作Oracle数据库。

0