【发布时间】:2020-03-12 10:42:53
【问题描述】:
我正在使用 Qt 和 sqlite3。问题是:
QSqlQuery::exec() 返回 false。
我认为这是由 QSqlDatabase::open() 引起的,因为它总是返回 true! 我发现实际上我使用 QSqlDatabase::setDatabaseName() 设置什么并不重要,它会返回 true,因为 sqlite 会创建不存在的 DB。
我使用 QFile::exist 来测试 DB 是否存在。但一切都很好,QFile 看到了 db。
代码:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("temp_client_db.sl3");
QFile datebase("temp_client_db.sl3");
if (!datebase.exists() || !db.open())
{
QMessageBox::critical(this, "Error", "Database isn't connected.");
}
else
{
QSqlQuery query;
query.prepare("SELECT * FROM exist_ask");
if (!query.exec())
{
QMessageBox::critical(this, "Error", "\"SELECT exist_ask\" works badly.");
}
else
{
...
【问题讨论】:
-
qDebug() << query.lastError().toString();里面if (!query.exec())的输出是什么 -
很可能是表不存在或者有拼写错误。尝试遍历
QSqlDatabase::tables()的结果以确认它存在,或使用单独的数据库管理器应用程序检查数据库。 -
@eyllanesc 感谢您的帮助。我发现了问题。不知怎么的,连QFile都报我有文件了,其实我只是没有把数据库加到build目录下。
-
@CPerkins 感谢您的帮助。我发现了问题。不知怎么的,连QFile都报我有文件了,其实我只是没有把数据库加到build目录下。
-
@VolodimirPavlenko sqlite 有一个特殊的特性:如果数据库不存在,那么 sqlite 将创建它。如果要验证数据库是否存在,则必须在打开数据库之前进行。