用qt使用sqlite数据库

用qt使用sqlite数据库,sqlite,qt,Sqlite,Qt,这是我的代码,似乎没有任何错误: QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("thedata.sqlite"); db.open(); QSqlQuery query; query.prepare("SELECT lastname FROM people where firstname='?' "); query.bindValue(0, lineEdit->text()); boo

这是我的代码,似乎没有任何错误:

QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("thedata.sqlite");
db.open();

QSqlQuery query;
query.prepare("SELECT lastname FROM people where firstname='?' ");
query.bindValue(0, lineEdit->text());

bool x = query.exec();

if(x){
   lineEdit_2->setText(query.value(0).toString());
 }

 else {
   QSqlError err;
    err = query.lastError();
    QMessageBox::about(this,"error",err.text()   );
 }
当程序运行时,它总是给出错误
参数计数不匹配
我正在使用Qt4.8和它自己的头来使用sqlite

我会非常感谢任何建议,虽然我在谷歌上搜索了很多关于这个问题的帖子,但没有任何帮助


谢谢。

您准备的声明是错误的,应该是:

quary.prepare("SELECT lastname FROM people where firstname=?");
请注意,占位符周围没有单引号(
)。如果加上引号,它将作为文本传递给数据库,留下一个无参数的查询和传递过多参数的代码

(将该变量名更改为
query
也是一个不错的选择。)

如果
QSqlQuery::prepare
,您还需要检查返回值,如果失败,则打印/显示从中获得的错误消息–否则
QSqlQuery::exec
将重置当前错误,如果解析准备好的语句时出现问题,您将得到一条毫无意义的错误消息

if(x){
  lineEdit_2->setText(quary.value(0).toString());
}

这也是不正确的。您需要调用(并检查的返回值)
query.next()
,将结果集定位到返回的第一行(如果有)。在调用
之前不能使用
.value(X)
。next()

是否验证了
lineEdit->text()
是否确实返回了某些内容,最好是字符串?@TimoGeusch是的,我键入了他们的名字。现在它没有给出eny错误,但什么也没有发生。它不会在lineEdit中显示姓氏这是另一个问题。您需要使用
query.next()
将结果集前进到第一行,否则
query
未定位到行上。确定接受为答案。非常感谢你,穆奇,我一个人永远不会发现这个问题,我花了几个小时试图解决这个问题。再次感谢……:)