如何使用Poco :: Data获取多个结果集?

时间:2017-05-02 16:56:19

标签: c++ database poco-libraries multiple-resultsets

我读了Poco::Data User Manual,并且提到该库支持多个结果集。本手册的Multiple Data Sets部分提供了此支持的示例。

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, Iterators and Rows部分中获取数据。

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 接口获取多个结果集?

后记:

多个结果集是存储过程调用的结果,因此,不可能只为每个选择使用多个 Statement 对象。

1 个答案:

答案 0 :(得分:2)

绝对可以处理从单个语句中的存储过程返回的多个结果集。见例如。 this test(已执行here);缺点是您必须事先知道返回的数据是什么样的,与RecordSet不同,后者是通用的,并且可以在没有任何关于返回数据结构的先验知识的情况下提供输出。

不幸的是,目前无法使用RecordSet访问多个数据集。但是,由于RecordSet is implemented in terms of Statement,添加这样的功能不应该太难。

希望这有帮助。