2014-02-28 40 views
0

是否有mysql ++提供的API調用來獲取結果返回的行數?mysql ++(mysqlpp):如何在迭代之前使用fetch_row通過UseQueryResult獲取結果中的行數

我的代碼結構如下:

// ... 
Query q = conn.query(queryString); 
if(mysqlpp::UseQueryResult res = query.use()){ 
    // some code 

    while(mysqlpp::Row row = res.fetch_row()){ 


    } 
} 

我剛纔的問題here容易,如果返回結果的行數的函數來解決。我可以使用它來分配該大小的內存並在我逐行迭代時填充。

回答

0

在任何人的情況下運行到這一點: 我引用user manual

最直接的方法來檢索結果集是使用查詢::店()。這將返回一個StoreQueryResult對象 ,它源自std :: vector,使其成爲Rows的隨機訪問容器。反過來, 每個Row對象就像一個String對象的std :: vector,一個用於結果集中的每個字段。因此,您可以 將StoreQueryResult視爲一個二維數組:您可以通過簡單地說 result[1][4]來獲得第二行的第5個字段。您還可以按字段名稱訪問行元素,如下所示:result[2]["price"]

與查詢結果的工作的一個不太直接的方法就是使用Query ::使用(),它返回一個UseQueryResult對象。 這個類的作用類似於STL輸入迭代器,而不是std :: vector:你一次一行地瀏覽結果集處理 ,總是前進。您無法在結果集中四處搜索,並且在找到結尾之前無法知道集合中有多少個結果。在付費給您帶來的不便之處,您可以獲得更好的內存效率,因爲整個結果集不需要存儲在RAM中。當您需要較大的結果集時,這非常有用。

一個建議發現herehttp://lists.mysql.com/plusplus/9047

是使用COUNT(*)查詢,獲取該結果,然後再次使用Query.use。爲避免計數不一致,可以將這兩個查詢包裝在一個事務中,如下所示:

START TRANSACTION; 
BEGIN; 

SELECT COUNT(*) FROM myTable; 

SELECT * FROM myTable; 

COMMIT; 
+0

這種方法對我很好。 –

相關問題