首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

[]Linux下使用occi连接oracle的有关问题

2013-12-13 
[求助]Linux下使用occi连接oracle的问题如题,最近一个项目需要在linux上开发一个B/S系统,在处理数据库访问

[求助]Linux下使用occi连接oracle的问题
如题,最近一个项目需要在linux上开发一个B/S系统,在处理数据库访问这一块关注到了occi
但是对其中的一些地方不明白,特来求助大神。

OCCI提供了访问数据库的接口,流程相对简单
CreateEnvironment  //创建环境变量
CreateConnection   //创建连接
CreateStatement    
Statement::SetSQL()
Statement::Execute()
TerminateStatement
TerminateConnection
TerminateEnvironment

简单的流程如上,但是“考虑到大量的并发访问,OCCI提供了连接池的使用”
以上的说明是OCCI的中文文档提供的,使用连接池则流程如下
CreateEnvironment  //创建环境变量
CreateConnectionPool
CreateConnection   //创建连接
CreateStatement    
Statement::SetSQL()
Statement::Execute()
TerminateStatement
TerminateConnection
TerminateConectionPool
TerminateEnvironment

如上所示,只是在创建环境变量之后以及释放环境变量之前增加了连接池的创建和释放。

接下来就是我不明白的地方,OCCI创建连接池一样要求提供用户名,密码以及连接字符串:
//建立连接池  
ConnectionPool *connPool=env->createConnectionPool(  
  pooluserName,  
  poolpassword,  
  connectString,  
  minConn,  
  maxConn,  
  incrConn);  

虽然这里的参数提示为poolusername和poolpassword,但是我仍然无法理解。
如果我不采用连接池,那么对于多线程的访问,可以在数据库操作接口中共享Environment变量,然后为每个线程创建连接并在操作完成后释放该连接,那么如果使用连接池,难道也是为每个线程创建一个连接池,然后再在各自的连接池中创建连接吗?但是如果这样的话,使用连接池似乎没有任何好处。

我知道自己的理解应该不对,但是实在不明白创建连接池时候的poolusername和poolpassword代表了什么,到底连接池是如何使用,并且起到节省开销的作用的?

希望有耐心的大神帮我解下惑!!!!感激不尽!! OCCI ORACLE 连接池
[解决办法]
1、连接池在初始化的时候会先起几个连接,主要由createConnectionPool函数的最小连接数参数minConn决定。当发现线程池现有连接不够用的时候会增加incrConn个,最多是maxConn个。
poolUsername和poolPasswd是初始化是起连接时的用户名和密码,还有当发现线程池连接不够用的时候,自动创建连接时的用户名和密码。如果随便放几个字符,会创建失败。如果不想初始化的时候就创建连接,可以将minConn设置成0。
pConnPoll->createConnection也会让输入用户名和密码,可以看出,线程池是以用户名和密码来确定你的连接的(如果线程池发现有这个用户名和密码的空闲连接,就直接返回给你。如果没有发现,就会创建新的连接)。

2、对于多线程,你可以创建一个连接池,然后给所有线程共同使用啊!比如:
CoonPoll cp;
Thread1 t1;
Thread2 t2;
cp只要是共享的(比如是一个全局变量;或者是局部变量,线程创建时以参数形式传递给线程),t1和t2都可以使用的

热点排行