Qt 为什么所有这些QSqlQuery属性都返回false?

Qt 为什么所有这些QSqlQuery属性都返回false?,qt,sqlite,qsqlquery,Qt,Sqlite,Qsqlquery,我已经设置了这样一个数据库,并确认正在添加记录,并从名为person的表中成功读取记录: db = QSqlDatabase::addDatabase("QSQLITE"); db.setHostName("localhost"); db.setDatabaseName("testDatabase.db"); if (db.open()){ checkTableExists("person"); //see below QSql

我已经设置了这样一个数据库,并确认正在添加记录,并从名为person的表中成功读取记录:

    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setHostName("localhost");
    db.setDatabaseName("testDatabase.db");
    if (db.open()){

        checkTableExists("person"); //see below

        QSqlQuery query;
        query.exec("create table person (id int primary key, "
                       "firstname varchar(20), lastname varchar(20))");
        query.exec("insert into person values(101, 'Danny', 'Young')");
        query.exec("insert into person values(107, 'Christine', 'Holand2')");
        query.exec("insert into person values(103, 'Lars', 'Gordon')");
        query.exec("insert into person values(104, 'Roberto', 'Robitaille')");
        query.exec("insert into person values(105, 'Maria', 'Papadopoulos')");

        checkTableExists("person"); //see below

        QSqlQuery query2("SELECT lastname FROM person");
             while (query2.next()) {
                 QString lastname = query2.value(0).toString();
                 qDebug()<<lastname;
             }

    }else{ //handle problem }

在创建表之前和之后,这些属性都不会返回true,这是为什么?

exec之后的所有内容都将是exec失败的后续错误。在执行失败后检查query.lastError。@Frankosterfield奇怪的是,查询没有失败,它实际上返回了预期的结果。那么为什么exec会报告失败呢?checkTableExists中的第二个查询返回预期结果?在我看来不是这样的,而且我认为查询语法不正确,请从.db文件中选择?。第一个函数中的查询可能会很成功,但它们与您在checkTableExists中打印的内容没有任何关系。在exec@FrankOsterfeld您是正确的,错误是返回查询的语法问题。这很奇怪,因为语法与我在其他几个地方看到的检查表是否已经存在的语法完全相同。
bool checkTableExists(QString tablename)const{
    QString sqlQuery = QString("SELECT name FROM testDatabase.db WHERE type =:table AND name = :tablename ");
    QSqlQuery query;
    bool prepare=query.prepare(sqlQuery);
    query.bindValue(":table", "table");
    query.bindValue(":tablename", tablename);
    bool isExec=query.exec();

    qDebug()<<"prepare: "<<prepare;
    qDebug()<<"exec: " << isExec;
    qDebug()<<"first: " << query.first();
    qDebug()<<"isSelect: " << query.isSelect();
    qDebug()<<"isValid: " << query.isValid();
    qDebug()<<"isActive: " << query.isActive();
    qDebug() << "next:" << query.next();
    qDebug()<< "nextResult: "<<query.nextResult();
    qDebug()<<"numRowsAffectd: "<<query.numRowsAffected();

    return query.next();

}
prepare:  false 
exec:  false 
first:  false 
isSelect:  false 
isValid:  false 
isActive:  false 
next: false 
nextResult:  false 
numRowsAffectd:  -1 
prepare:  false 
exec:  false 
first:  false 
isSelect:  false 
isValid:  false 
isActive:  false 
next: false 
nextResult:  false 
numRowsAffectd:  -1 
"Young" 
"Holand" 
"Gordon" 
"Robitaille" 
"Papadopoulos" 
"Holand2"