您的位置:首页 > 数据库 > Oracle

C++使用oracle的occi库操作oracle数据库

2016-03-14 14:46 302 查看
版权声明:转自http://blog.csdn.net/dgyanyong/article/details/17144141

// C++使用oracle的occi库操作oracle数据库

//步骤

//1、创建OCCI上下文环境

//2、创建数据库连接

//3、创建Statement对象

//4、执行查询SQL

//5、执行插入SQL

//6、终止Statement对象

//7、断开数据库连接

//8、释放OCCI上下文环境

// 代码示例如下:

[cpp] view
plain copy

 





#include <string>  

using namespace std;  

#include "occi.h"  

using namespace oracle::occi;  

  

int main(int argc, char *argv[])  

{  

    char szUserName[40];        // 用户名  

    char szPassword[40];        // 密码  

    char szConnectString[256];  // 连接字符串  

  

    Environment *pEnv = NULL;   // OCCI上下文环境  

    Connection *pConn = NULL;   // 数据库连接  

    Statement *pStmt = NULL;    // Statement对象  

    std::string strTemp;  

  

    try {  

        // 创建OCCI上下文环境  

        pEnv = Environment::createEnvironment(  

            Environment::Mode(Environment::OBJECT|Environment::THREADED_MUTEXED));  

        if (NULL == pEnv) {  

            printf("createEnvironment error.\n");  

            return -1;  

        }  

        // 创建数据库连接  

        pConn = pEnv->createConnection(szUserName, szPassword, szConnectString);  

        if(NULL == pConn) {  

            printf("createConnection error.\n");  

            return -1;  

        }  

        // 创建Statement对象  

        pStmt = pConn->createStatement();  

        if(NULL == pStmt) {  

            printf("createStatement error.\n");  

            return -1;  

        }  

        //--------查询---------  

        // 查询数据库时间  

        ResultSet *pRs = pStmt->executeQuery(  

            "SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL");  

        while(pRs->next()) {  

            strTemp = pRs->getString(1);  

            printf("db time:%s.\n", strTemp.c_str());  

            // int类型取值用getInt()  

            break;  

        }  

        pStmt->closeResultSet(pRs);  

        //--------插入---------  

        // 指定DML为自动提交  

        pStmt->setAutoCommit(TRUE);  

        // 设置执行的SQL语句  

        pStmt->setSQL("INSERT INTO TA (ID, NAME) VALUES (1, 'ZS')");  

        // 执行SQL语句  

        nRet = pStmt->executeUpdate();  

        if(nRet == 0) {  

            printf("executeUpdate insert error.\n");  

        }  

        //----------------------  

        // 终止Statement对象  

        pConn->terminateStatement(pStmt);  

        // 断开数据库连接  

        pEnv->terminateConnection(pConn);  

        // 释放OCCI上下文环境  

        Environment::terminateEnvironment(pEnv);  

    }  

    // 捕获数据库操作异常  

    catch(SQLException &sqlExcp) {  

        printf("SQLException %d:%s.\n",   

            sqlExcp.getErrorCode(), sqlExcp.getMessage().c_str());  

        return -1;  

    }  

    // 捕获其他异常  

    catch(exception &ex) {  

        printf("other exception %s.\n", ex.what());  

        return -1;  

    }  

    return 0;  

}  

// 连接池的用法

// 注意连接池在多线程中使用的时候,操作连接池需要加锁

// 使用连接池的时候,数据库服务器要支持才可以使用。

// 启动数据库服务器连接池

// exec dbms_connection_pool.start_pool;

[cpp] view
plain copy

 





char szUserName[40];            // 用户名  

char szPassword[40];            // 密码  

char szConnectPoolString[256];  // 连接字符串  

int  nMaxConn = 40;             // 最大值  

int  nMinConn = 5;              // 初始最小值  

int  nIncrConn = 1;             // 每次增长值  

  

// 1、创建OCCI上下文环境  

Environment *pEnv = Environment::createEnvironment(  

    Environment::Mode(Environment::OBJECT|Environment::THREADED_MUTEXED));  

  

// 2、建立连接池  

StatelessConnectionPool *pConnPool = pEnv->createStatelessConnectionPool(  

    szUserName, szPassword, szConnectPoolString, nMaxConn, nMinConn, nIncrConn);  

pConnPool->setTimeOut(5000);  

  

// 3、从连接池获取连接  

Connection *pConn = pConnPool->getConnection(  

    szUserName, szPassword, szConnectPoolString);  

  

// 4、释放连接到连接池  

pConn->flushCache();  

pConnPool->terminateConnection(pConn);  

  

// 5、释放连接池  

pEnv->terminateStatelessConnectionPool(m_pConnPool);  

  

// 6、释放OCCI上下文环境  

Environment::terminateEnvironment(pEnv);  

 // linux下编译、运行

// 1、要在.bash_profile中设置环境变量

//    export ORACLE_BASE=/u01

//    export ORACLE_HOME=$ORACLE_BASE/oracle

//    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

// 2、编译时加上下面的库

//    libocci.so

//    libclntsh.so

//    -locci -lclntsh
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: