В случае, если кто работает в этом: цитирую user manual:
Самый прямой способ получить набор результатов является использование Query :: магазин(). Это возвращает объект StoreQueryResult, , который происходит из std :: vector, что делает его контейнером с произвольным доступом для строк. В свою очередь, каждый объект Row похож на std :: vector объектов String, по одному для каждого поля в наборе результатов. Таким образом, вы можете рассматривать StoreQueryResult как двумерный массив: вы можете получить пятое поле во второй строке, просто указав result[1][4]
. Вы также можете получить доступ к элементам строки по имени поля, например: result[2]["price"]
.
И
Менее прямой способ работы с результатами запроса является использование Query :: использование(), который возвращает объект UseQueryResult. Этот класс действует как входной итератор STL, а не std :: vector: вы проходите обработку результатов набора по одной строке за раз, всегда вперед. Вы не можете искать в результирующем наборе, и вы не можете узнать, сколько результатов пока что не найдено конца. При оплате этих неудобств вы получаете лучшую эффективность памяти, , потому что весь набор результатов не нужно хранить в ОЗУ. Это очень полезно, когда вам нужны большие результирующие наборы.
Предложение найдено here: http://lists.mysql.com/plusplus/9047
является использование COUNT (*) запрос и получать тот результат, а затем использовать Query.use снова. Чтобы избежать несогласованного подсчета, можно обернуть два запроса в одну транзакцию следующим образом:
START TRANSACTION;
BEGIN;
SELECT COUNT(*) FROM myTable;
SELECT * FROM myTable;
COMMIT;
Этот подход работал отлично со мной. –