这是我的代码,似乎没有任何错误:
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() );
}
当程序工作时总是会出现错误parameter count mismatch
我正在使用qt 4.8及其自己的头文件来使用sqlite。
我会非常感谢任何建议,虽然我在谷歌搜索我看到这个问题很多帖子但没有帮助我。
谢谢。
答案 0 :(得分:2)
你准备好的陈述是错的,应该是:
quary.prepare("SELECT lastname FROM people where firstname=?");
请注意,占位符周围没有单引号('
)。如果你输入引号,它会作为文字传递给数据库,为你留下一个无参数的查询和传递过多参数的代码。
(将变量名称更改为query
也是一个不错的选择。)
如果QSqlQuery::prepare
,您还需要检查返回值,如果失败,则打印/显示您从中获取的错误消息 - 否则QSqlQuery::exec
会重置当前错误,而您&& #39;如果在解析预准备语句时出现问题,则会收到一条毫无意义的错误消息。
if(x){
lineEdit_2->setText(quary.value(0).toString());
}
这也是不正确的。您需要调用(并检查返回值)query.next()
以将结果集定位到返回的第一行(如果有的话)。在您拨打.value(X)
之前,您无法使用.next()
。