Qt 为什么所有这些QSqlQuery属性都返回false?
我已经设置了这样一个数据库,并确认正在添加记录,并从名为person的表中成功读取记录: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
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"