【发布时间】:2021-10-24 02:50:25
【问题描述】:
我有这样的任务:
我需要为 SQLite 数据库制作一个控制台包装。输入ios一个查询,输出是结果或错误
代码如下。输出有问题:所有 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;
}
【问题讨论】:
-
@drescherjm 没有错误,只是输出不正确