Qt中的sql数据库输出



我有这样的任务:

我需要为SQLite数据库做一个控制台包装。输入一个查询,输出结果或错误

代码如下。输出有一个问题:所有ID为0,名称为空。建议,如何做出正确的输出

int main()
{
QSqlDatabase myDb = QSqlDatabase::addDatabase("QSQLITE");
myDb.setDatabaseName("MyFirstDatabase.db");
if(!myDb.open()){
std::cout<< myDb.lastError().text().toStdString() << std::endl;
}
else{
std::cout<<"Database is opened."<<std::endl << "To close the app, print "exit"" << std::endl;
std::string requestString;
QSqlQuery query;
do{
std::cout << "Input a command:" << std::endl;
getline(std::cin, requestString);
QString QRequest = QString::fromStdString(requestString);
if(requestString != "exit"){
query.exec(QRequest);
if(query.isActive() && requestString!="exit"){
std::cout << "Request succeded." << std::endl;
}
else{
std::cout << "Whoops, something went wrong! ERROR: " << query.lastError().text().toStdString() << std::endl;
}
if(query.isSelect()){
QSqlRecord rec = query.record();
for(int i = 0; i < rec.count(); i++){
std::cout << std::setiosflags(std::ios::left);
std::cout << std::setw(10) << rec.fieldName(i).toStdString();
}
std::cout << std::endl;
while(query.next()){
std::cout << std::setiosflags(std::ios::left);
for(int j = 0; j < rec.count(); j++){
std::cout << std::setw(10) << rec.value(j).toString().toStdString();
}
std::cout << std::endl;
}
}
}

}while(requestString!="exit");
}
myDb.close();
std::cout<<"Thanks for using database. All the best!"<<std::endl;
return 1;
}

问题是值不是由Record携带,而是由Query携带。所以有正确的输出:

while(query.next()){
std::cout << std::setiosflags(std::ios::left);
for(int j = 0; j < rec.count(); j++){
std::cout << std::setw(10) 
<<query.value(j).toString().toStdString();
}
std::cout << std::endl;
}

最新更新