Oracle的C++调用接口(OCCI)

以前研究过一些数据库接口,比如OCI,今天又特意研究了OCCI,OCCI是在OCI的基础上封装的一层面向C++开发者的一套类库,采用面向对象的方法组织,而OCI是C语言接口,函数调用相当复杂,并且封装也不太容易。废话少说,先上代码吧。

 

#include <iostream>
#include <occi.h>
#include <assert.h>

using namespace oracle::occi;
using namespace std;

int main () 
{
	Environment *env = NULL;
	Connection *conn = NULL;
	Statement *stmt = NULL;
	ResultSet *rs = NULL;

	string username = "scott";						//用户名
	string password = "tiger";						//密码
	string connstring = "//localhost:1521/ORCL";	//连接字符串
	string sql,strname;
	int errNum = 0;
	string errMsg = "";

	env = Environment::createEnvironment(); //创建一个环境变量
	try 
	{
		assert(env != NULL);
		conn = env->createConnection(username,password,connstring); //创建一个数据库连接对象
		stmt = conn->createStatement(); //创建一个Statement对象
	} 
	catch (SQLException ex) 
	{
		errNum = ex.getErrorCode();
		errMsg = ex.getMessage();
		cout << "Error Number : "<< errNum << endl; //取出异常代码
		cout << errMsg << endl; //取出异常信息
	}

	sql = "SELECT ID,NAME FROM STUDENT WHERE ID >= :1";  //拼接一个SQL语句
	int id = 2;
	stmt->setSQL(sql); //设置SQL语句到Statement对象中
	stmt->setInt(1,id);
	try 
	{
		char buffer[4096];			//缓冲区
		rs =  stmt->executeQuery();//执行SQL语句
		int recordCnt = rs->getNumArrayRows();
		rs->setCharacterStreamMode(2,1000);
		while (rs->next()) 
		{ 
			//一条一条的取数据
			unsigned int length = 0;
			unsigned int size = 500;
			Stream *stream = rs->getStream(2);
			while (stream->status() == Stream::READY_FOR_READ)
			{
				length += stream->readBuffer(buffer +length, size);	  
			}
			cout << "Read " << length << " bytes into the buffer" << endl;
		}
		cout << "SELECT ―― SUCCESS" << endl;
	} 
	catch (SQLException ex) 
	{
		cout << "Error Number : "<< ex.getErrorCode() << endl; //取出异常代码
		cout << ex.getMessage() << endl; //取出异常信息
	}

	conn->terminateStatement(stmt); //终止Statement对象
	env->terminateConnection(conn); //断开数据库连接
	Environment::terminateEnvironment(env); //终止环境变量

	return 1;
}


 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值