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

原创 2013年12月05日 16:53:42

// 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

 

相关文章推荐

c++使用occi 与oracle交互

原来从没有用过oracle,最近小小的试了一把 c++与oracle的编程,由于没有接触过,其过程比较艰辛,特此记录,所谓好记性不如烂笔头啊! c++要与oracle通信,肯定要使用oracle提...
  • hmylk
  • hmylk
  • 2015年06月15日 20:03
  • 638

VC++中使用OCCI

VC连Oracle
  • echo7L
  • echo7L
  • 2011年04月25日 19:25
  • 4188

在VC++中使用OCCI

1.简介 在Windows下访问Oracle数据库可以使用ADO,ADO.Net,OLEDB,ODBC,跨平台的OCCI等方法,其中速度最快,对Oracle支持最完整的是Oracle提供的OCCI. ...

C++通过occi执行select语句、存储过程、函数,取cursor值示例

#include #include #include using namespace std; #include #include using namespace ora...
  • e_wsq
  • e_wsq
  • 2014年03月21日 23:00
  • 1266

通过OCCI连接oracle(C++)

OCCI介绍 OCCI:Oracle C++调用接口(OCCI),即Oracle的C++API,允许你使用面向对象的特性、本地类、C++语言的方法来访问Oracle数据库。 OCCI优势 基于标准C...

通过OCCI操作Oracle数据库详解

1.简介     OCCI 即 Oracle C++ Call Interface          在Windows下访问Oracle数据库可以使用ADO,ADO.Net,OLEDB,ODBC,跨...
  • rznice
  • rznice
  • 2013年09月10日 09:23
  • 4892

C++连接Oracle之OCCI(windows)

上一节我们讲过了ADO连接Oracle,这一节我们尝试通过OCCI的方式,来在windows平台下连接Oracle数据库,下一节讨论在Linux环境下通过OCCI的方式连接远程的Oracle数据库。 ...

Oracle occi 批量插入数据

在用OCCI 处理批量数据库插入时,效率不高,一秒钟只能插入1000条数据,这是使用自动提交数据的情况。因为同时需要处理较多数据,那么插入数据这个环节的效率还是很有必要得提高的。到网上找了一些资料,发...

VC使用OCCI开发的简介

VC++环境设置   1加include files项:%ORACLE_HOME%\oci\include       %ORACLE_HOME% = HKEY_LOCALMACHINE_SOFTW...

用winpcap发送UDP数据包

今天尝试用winpcap提供的pcap_sendpacket函数成功发送一个udp数据包到目的地址。 下面就来回顾一下过程。 首先用pcap_findalldevs得到网络接口,比如在我的机器上得到这...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++使用oracle的occi库操作oracle数据库
举报原因:
原因补充:

(最多只允许输入30个字)