Как получить несколько наборов результатов с Poco :: Data?

Я прочитал Poco :: Data Руководство пользователя и упоминается, что библиотека поддерживает несколько наборов результатов. Есть пример такой поддержки в Несколько наборов данных раздел руководства.

typedef Tuple<std::string, std::string, std::string, int> Person;
Person pHomer, pLisa;
int aHomer(42), aLisa(10), aBart(0);

session << "SELECT * FROM Person WHERE Age = ?; ""SELECT Age FROM Person WHERE FirstName = 'Bart'; ""SELECT * FROM Person WHERE Age = ?",
into(pHomer, 0), use(aHomer),
into(aBart, 1),
into(pLisa, 2), use(aLisa),
now;

Но этот пример только для одного из поддерживаемых способов извлечения данных из библиотеки. Есть второй способ получения данных в RecordSets, итераторы и строки раздел.

Statement select(session); // we need a Statement for later RecordSet creation
select << "SELECT * FROM Person", now;

// create a RecordSet
RecordSet rs(select);
std::size_t cols = rs.columnCount();

// print all column names
for (std::size_t col = 0; col < cols; ++col)
std::cout << rs.columnName(col) << std::endl;

// iterate over all rows and columns
for (RecordSet::Iterator it = rs.begin(); it != rs.end(); ++it)
std::cout << *it << " ";

У меня есть обертка Poco :: Data который использует второй способ для извлечения данных, и я должен расширить его для поддержки нескольких наборов результатов. Интересно, возможно ли это и как получить несколько наборов результатов с RecordSet интерфейс?

Послесловие:

Множественные результирующие наборы являются результатом вызова хранимой процедуры, и поэтому невозможно использовать только несколько утверждение объекты для каждого выбора.

0

Решение

Определенно возможно иметь дело с несколькими наборами результатов, которые возвращаются из хранимой процедуры в рамках одного оператора. См. Например этот тест (выполняется Вот); недостатком является то, что вы должны знать заранее, как выглядят возвращаемые данные, в отличие от RecordSet, который является универсальным и может обеспечить вывод без каких-либо предварительных знаний о структуре возвращаемых данных.

К сожалению, в настоящее время невозможно получить доступ к нескольким наборам данных с помощью RecordSet. Тем не менее, так как RecordSet реализуется с точки зрения Заявления, добавить такую ​​функцию не должно быть слишком сложно.

Надеюсь это поможет.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]