2016-08-01 107 views
0

我正在構建一個QT應用程序,用於查詢MySQL數據庫。當我做query.exec("call SelectUsersPhotos()")時,我得到的響應很好,但如果我在prepare上設置查詢字符串,如下面的代碼所示,數據庫不會返回任何值,也不會引發任何錯誤。Qt mysql查詢準備不起作用

if (db.open()) { 
    cout << "Querying GetUserPhotos from user " << user->Name << endl; 

    QSqlQuery query; 

    query.prepare("call SelectUsersPhotos()"); 
    query.exec(); 

    while (query.next()) { 
     UserPhoto *userPhoto = new UserPhoto(); 
     userPhoto->UserPhotoId = query.value(0).toInt(); 
     userPhoto->UserId  = query.value(1).toInt(); 
     userPhoto->Created  = query.value(2).toDateTime(); 
     userPhoto->Name  = query.value(3).toString().toStdString(); 
     usersPhotos->push_back(userPhoto); 
    } 

    query.finish(); 

    db.close(); 

    cout << "Photos " << usersPhotos->size() << endl; 
} 

資源:http://qt.developpez.com/doc/4.6/qsqlquery/

回答

-1

「準備SQL查詢的查詢執行如果查詢成功製備返回true;否則返回false。」

也許你應該試着

bool b = query.prepare("call SelectUsersPhotos()"); 
while(!b) 
    b = query.prepare("call SelectUsersPhotos()"); 
query.exec(); 

編輯: 函數簽名是

bool QSqlQuery::prepare (const QString & query) 

所以它需要的值的地址,但u的傳遞右值作爲參數。也許ü應該嘗試

QString qstr("call SelectUsersPhotos()"); 
query.prepare(qstr); 
query.exec(qstr); 

筆記,我不知道爲什麼EXEC(常量QString的&查詢)的作品,即使有相同的參考參數。

+0

query.prepare立即返回true,它仍然不返回任何內容。 –

+1

如果查詢無效並且 - 可能 - 在某些延遲後不會突然變爲有效,那麼爲什麼您會永遠冒險循環?看起來像不好的建議。並引用'!='值的地址。一個ref可以被優化掉,用一個值替換,沒有地址。如果所指對象的地址被採納,那就不同了。更重要的是:'const&'可以很好地綁定到一個臨時右值,這會導致它被終生擴展到引用的範圍。例如你有沒有傳遞一個函數採用'std :: string'的右值?它工作得很好。因此它與被問到的問題無關。 –