使用qt的sqlite数据库

时间:2012-12-18 16:18:59

标签: 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());

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。

我会非常感谢任何建议,虽然我在谷歌搜索我看到这个问题很多帖子但没有帮助我。

谢谢。

1 个答案:

答案 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()