用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
未定位到行上。确定接受为答案。非常感谢你,穆奇,我一个人永远不会发现这个问题,我花了几个小时试图解决这个问题。再次感谢……:)