对于
ResultSet
类中的next()
方法,默认是一次检索一行数据,及一次检索执行一次网络往返,当结果集数量大时,效率低;对此OCCI提供了几种改善方法,即:在一次网络往返返回多行数据。
1. 通过使用setPrefetchRowCount()
或setPrefetchMemorySize()
方法设置预取属性
setPrefetchRowCount()
设置要预取的行数,setPrefetchMemorySize()
设置预取的大小。如果同时设置这两个属性,除非首先达到指定的内存限制,否则将预取指定的行数。如果首先达到指定的内存限制,则返回在调用setPreprichMemorySize()
方法所定义的内存空间的尽可能多的行。默认情况下,预取属性是被打开的,并且数据库始终会获取一个额外的行。若要关闭预取属性,请将预取行计数和内存大小设置为0。
void setPrefetchRowCount(unsigned int rowCount);
void setPrefetchMemorySize(unsigned int bytes);
2. 通过setDataBuffer()
方法提供特定缓冲区,为next()
方法提供要返回的数据行数
对于前一种方法当返回数据后数据将存储在OCCI内置缓冲区中,我们使用setXXX()
方法取出特定数据;当时setDataBuffer()
方法提供特定缓冲区时,数据存储将存放在用户指定的缓冲区中。
注意:在调用
next()
方法前调用setDataBuffer()
方法,使用getNumArrayRows()
方法得到获取的数据行数,
Example1.1
ResultSet *resultSet = stmt->executeQuery(...);
resultSet->setDataBuffer(...);
while (resultSet->next(numRows) == DATA_AVAILABLE) {
process(resultSet->getNumArrayRows() );
}