c++ - 如何在qt中修复 "No query Unable to fetch row"

标签 c++ sql database sqlite qt

我有一个简单的 sqlite3 数据库,其中包含几个名称和 ID。如果给出了 id,我想获取名称。如果我运行我的程序,我会收到以下错误:

ERROR: "ERROR: "No query Unable to fetch row" "SELECT name FROM name_table WHERE id = %1)""

数据库名称是“dataname”,数据所在的表是“name_table”。下面是我的代码:

QSqlDatabase db;
   mInputText = ui->lineEdit->text();
   const QString DRIVER("QSQLITE");
   if(QSqlDatabase::isDriverAvailable(DRIVER)){

   db = QSqlDatabase::addDatabase(DRIVER);

}

   db.setHostName("localhost");
   db.setDatabaseName("dataname");

   db.open();

   if(!db.open()){
       qWarning() << "ERROR: " << db.lastError();
   }    
}


MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
     mInputText = ui->lineEdit->text();
     QSqlQuery query;
     query.prepare("SELECT name FROM name_table WHERE id = %1");
     query.bindValue("%1", mInputText);

     if(!query.exec())
         qWarning() << "ERROR: " << query.lastError().text();
     qDebug() << query.executedQuery();

     if(query.first())
         ui->mOutputText->setText(query.value(0).toString());
     else
         ui->mOutputText->setText("not found");


}

有人可以帮我找出我的错误吗?我是 sql 新手。我认为我的错误可能是“.setHostName”或查询绑定(bind)值,但我对所有内容都进行了处理,但无法正常工作。在此先感谢您!

问候

最佳答案

我认为您错误地使用了占位符。除了您的查询字符串有语法错误 - 右括号。您可能想试试这个:

 [..]
 query.prepare("SELECT name FROM name_table WHERE id = ?");
 query.bindValue(0, mInputText);
 [..]

 [..]
 query.prepare("SELECT name FROM name_table WHERE id = :id");
 query.bindValue(":id", mInputText);
 [..]

还值得检查 QSqlQuery::prepare() 函数返回的内容。有了它,您可以在执行查询错误之前捕获它们。

关于c++ - 如何在qt中修复 "No query Unable to fetch row",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58092914/

相关文章:

java - 如何防止 JPA 实体出现 ClassCastException?

c++ - 未解析的外部符号

mysql - 将 IN 语句内的 SELECT 语句中的列用于主查询

java - 非数据库应用事务

sql - 插入时使用 PostgreSQL 外部数据包装器,批量插入行是否更高效?

sql - Django:生成博客的事件条目列表。这有效率吗?

ruby - 在 Ruby 命令行应用程序中处理数据存储

c++ - 双瓶颈,如何改善?

c++ - 如何在 C++ 4.4.6 中包含 hash_map?

c++ - GNU 使 : Strange "Multiple targets pattern" - error