對於
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() );
}