2017-05-02 12 views
1

私はPoco::Data User Manualを読んでおり、ライブラリには複数の結果セットがサポートされていることが言及されています。このサポートの例はマニュアルのMultiple Data Setsセクションにあります。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; 

しかし、この例は、ライブラリでデータを取得するためにサポートされている方法のうちの1つについてのみです。 RecordSets, Iterators and Rowsセクションにデータを取得する2つ目の方法があります。

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 << " "; 

Iは、データをフェッチするための第二の方法を使用しポコ::データラッパーを有し、私は複数の結果セットをサポートするためにそれを拡張しなければなりません。 RecordSetインターフェイスを使用して複数の結果セットを取得する方法と可能性がありますか?

はワーズ:

複数の結果セットは、ストアド・プロシージャ・コールの結果であり、このため、それだけで選択毎に複数オブジェクトを使用することは不可能です。

答えて

2

1つのステートメント内でストアドプロシージャから返される複数の結果セットを処理することは、間違いなく可能です。たとえばを参照してください。 this test(実行here);欠点は、一般的なRecordSetとは異なり、返されたデータ構造について事前知識がなくても、返されたデータがどのようなものかを知る必要があることです。

残念ながら、RecordSetを使用して複数のデータセットにアクセスすることは現在できません。ただし、RecordSet is implemented in terms of Statement以降、このような機能を追加するのはあまり難しくありません。

これが役に立ちます。

+0

残念ながら、* Poco :: Data *の包括的なラッパーでは、返されるデータがどのように見えるかはわかりません。あなたはそのような機能要求を受け入れると思いますか? – bobeff

+0

確かに、機能要求は受け入れられます。しかし、実装の時間枠は未定義です。 – Alex

関連する問題