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

c 打开oracle数据库

步骤,1. 打开命令行窗口。,2. 输入 sqlplus / as sysdba 并回车。,3. 输入用户名和密码,即可连接Oracle数据库。

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

1、使用OCI(Oracle Call Interface)

安装和配置OCI:在使用OCI之前,需要安装Oracle客户端并配置环境变量,如ORACLE_HOMELD_LIBRARY_PATH

编写OCI程序

初始化OCI环境:在进行数据库操作之前,需要初始化OCI环境。

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

连接数据库:使用OCILogon函数进行数据库连接。

        OCISvcCtx *svc;
        OCIHandleAlloc(env, (void)&svc, OCI_HTYPE_SVCCTX, 0, NULL);
        OCILogon(env, err, &svc, "username", strlen("username"), "password", strlen("password"), "dbname", strlen("dbname"));

执行SQL语句:可以使用OCIStmtPrepareOCIStmtExecute等函数来准备和执行SQL语句。

        OCIStmt *stmt;
        OCIHandleAlloc(env, (void)&stmt, OCI_HTYPE_STMT, 0, NULL);
        OCIStmtPrepare(stmt, err, "SELECT * FROM mytable", strlen("SELECT * FROM mytable"), OCI_NTV_SYNTAX, OCI_DEFAULT);
        OCIStmtExecute(svc, stmt, err, 1, 0, NULL, NULL, OCI_DEFAULT);

处理结果集:通过定义变量和获取数据来处理查询结果。

        OCIDefine *defn;
        char result[100];
        OCIHandleAlloc(env, (void)&defn, OCI_HTYPE_DEFINE, 0, NULL);
        OCIDefineByPos(stmt, &defn, err, 1, (void*)result, 100, SQLT_STR, NULL, NULL, NULL, OCI_DEFAULT);
        while (OCIStmtFetch(stmt, err, 1, OCI_FETCH_NEXT, OCI_DEFAULT) == OCI_SUCCESS) {
            printf("Result: %s
", result);
        }

清理资源:在程序结束时,需要清理分配的资源。

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

2、**使用Pro*C预编译器

**安装和配置Pro*C**:首先需要安装Oracle客户端,并配置Pro*C环境,设置ORACLE_HOMEPATH环境变量。

**编写Pro*C程序**:在Pro*C程序中,可以直接嵌入SQL语句。

     #include <stdio.h>
     #include <stdlib.h>
     #include <sqlca.h>
     EXEC SQL INCLUDE SQLCA;
     int main()
     {
         EXEC SQL BEGIN DECLARE SECTION;
         VARCHAR usr[20],pass[20],serv[20];
         char emp_name[20];
         int emp_id;
         EXEC SQL END DECLARE SECTION;
         strcpy(usr.arr,"test01");
         usr.len=(unsigned short)strlen((char *)usr.arr);
         strcpy(pass.arr,"111111");
         pass.len=(unsigned short)strlen((char *)pass.arr);
         strcpy(serv.arr,"orcl");
         serv.len=(unsigned short)strlen((char *)serv.arr);
         EXEC SQL CONNECT :usr IDENTIFIED BY :pass USING :serv;
         if(sqlca.sqlcode)
         {
             printf("ORA-ERROR: sqlca.sqlcode=%d
",sqlca.sqlcode);
             exit(0);
         }
         printf("Connect!
");
         printf("please input id:");
         scanf("%d",&emp_id);
         EXEC SQL SELECT emp_id , emp_name into :emp_id,:emp_name from emp where emp_id=:emp_id;
         printf("Name=%s
", emp_name);
         EXEC SQL COMMIT WORK RELEASE;
         printf("Disconnect!
");
         return 0;
     }

编译和运行程序:将.pc文件处理成.c文件,然后使用gcc编译链接生成可执行程序。

     proc test.pc
     gcc test.c -o test -lclntsh -I/usr/include/oracle/11.2/client/ -L/usr/lib/oracle/11.2/client/lib
     ./test

3、使用ODBC(Open Database Connectivity)

安装和配置ODBC:需要安装ODBC驱动程序,并配置数据源名称(DSN),在Linux系统中,可以使用odbcinstodbc.ini文件进行配置。

编写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);

连接数据库:使用SQLDriverConnect函数连接到数据库。

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

执行SQL语句:可以使用SQLExecDirect函数执行SQL语句。

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

处理结果集

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

清理资源

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

以下是两个关于在C语言中打开Oracle数据库的常见问题及解答:

1、问题:使用OCI连接Oracle数据库时,出现“ORA-12541: TNS:no listener”错误怎么办?

解答:这个错误通常是由于Oracle监听器没有启动或者监听的地址和端口配置不正确导致的,可以检查Oracle监听器是否正在运行,如果没有运行,可以通过命令lsnrctl start启动监听器,检查tnsnames.ora文件中的数据库连接配置是否正确,包括主机名、端口号和服务名等信息。

2、问题:使用Pro*C连接Oracle数据库时,编译报错找不到sqlca.h头文件怎么办?

解答:这可能是因为没有正确配置Pro*C的环境变量,或者没有安装Oracle客户端,需要确保ORACLE_HOME环境变量指向Oracle客户端的安装目录,并且该目录下有sqlca.h头文件,在编译时需要指定包含目录和库目录,例如使用-I/usr/include/oracle/11.2/client/-L/usr/lib/oracle/11.2/client/lib选项。

0