【问题标题】:SQL-database output in QtQt 中的 SQL 数据库输出
【发布时间】: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 没有错误,只是输出不正确

标签: c++ sql sqlite qt


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-24
    • 2011-07-18
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    相关资源
    最近更新 更多