J'ai bloqué le problème comment récupérer toutes les lignes, c'est-à-dire les dernières lignes restantes quand on utilise array fetch par setdatabuffer(). il y a 80405 lignes dans une table nommée exemple. OcciResultSet resultSet = occi.executeQuery ("sélectionnez x, y dans l'exemple");comment récupérer toutes les lignes en utilisant array fetch par setdatabuffer()
const int size = 10000;
double xs[size], ys[size];
ub4 *length = NULL;
resultSet->setDataBuffer(1, &xs[0], oracle::occi::OCCIBDOUBLE, sizeof(xs[0]), length);
resultSet->setDataBuffer(2, &ys[0], oracle::occi::OCCIBDOUBLE, sizeof(ys[0]), length);
int count = 0;
while (resultSet->next(size) == oracle::occi::ResultSet::DATA_AVAILABLE)
{
for (int i = 0; i < size; i++)
{
printf("row: %d\n", ++count);
double x = xs[i];
double y = ys[i];
}
}
ne peut extraire que les 80000 premières lignes. il reste 405 lignes, comment récupérer les 405 dernières lignes. merci d'avance.
Does [this] (https://docs.oracle.com/cd/B19306_01 /appdev.102/b14294/performance.htm#CHDIDIDE) aide? Le problème que je vois dans votre boucle for est qu'il doit itérer jusqu'à ce que i == resultSet-> getNumArrayRows(), pas 'size'. 'size' est le nombre maximum de lignes pouvant être récupérées. Le nombre réel de lignes récupérées peut être inférieur et c'est pourquoi il existe une méthode pour vous dire combien ont été réellement récupérées. – jeff6times7
@ jeff6times7, yes, resultSet-> getNumArrayRows() est sûr pour la sauvegarde. mais "taille" est ok. la description de setdatabuffer() sur la page oracle 'Cela provoque jusqu'à la quantité numRows de données à extraire pour chaque colonne. Les tampons spécifiés avec l'interface setDataBuffer() doivent être suffisamment grands pour contenir au moins numRows de données'. Maintenant, une seule méthode: récupérez les 405 premières lignes, puis récupérez la dernière ligne 800000 par la récupération de tableau. – ruuut