// C++使用oracle的occi库操作oracle数据库
//步骤
//1、创建OCCI上下文环境
//2、创建数据库连接
//3、创建Statement对象
//4、执行查询SQL
//5、执行插入SQL
//6、终止Statement对象
//7、断开数据库连接
//8、释放OCCI上下文环境
// 代码示例如下:
#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;
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

1万+

被折叠的 条评论
为什么被折叠?



