gpt4 book ai didi

sqlite - 数据库表不存在,但在尝试创建它时和之后都存在

转载 作者:行者123 更新时间:2023-12-03 17:23:43 25 4
gpt4 key购买 nike

如果表尚不存在,我将尝试仅初始化我的 sqlite 数据库。如果没有,则应创建它们。现在检查总是在干净的数据库上成功(当然该表还不存在),但是一旦我尝试在 if-block 中创建它,sqlite 就会提示它确实存在。我可以确认该代码运行后该表存在,但我仍然从 qFatal 调用中收到该错误消息。

#include <QApplication>
#include <QDebug>

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QStringList>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
if(!db.open())
qDebug() << "Couldn't open database file!";
else
qDebug() << "Opened database :memory:";

qDebug() << "Existing tables:";
QStringList::const_iterator it;
for(it = db.tables().begin(); it != db.tables().end(); it++)
qDebug() << it->toLocal8Bit().constData();
qDebug() << "End";

if(!db.tables().contains(QString("testtable")))
{
// The files table doesn't exist
qDebug() << "Initializing DB";
QString queryText = "CREATE TABLE testtable (id varchar(32) NOT NULL)";
QSqlQuery query(queryText, db);
if(!query.exec())
qFatal("Couldn't initialize database: %s: %s", qPrintable(query.lastError().driverText()), qPrintable(query.lastError().databaseText()));
}

return a.exec();
}

引用输出:

Opened database :memory: 
Existing tables:
End
Initializing DB
Couldn't initialize database: Unable to fetch row: table testtable already exists

我通过在 sql 查询中使用 IF NOT EXISTS 解决了这个问题,但这并没有真正解决问题。(OS X 和 Ubuntu 12.04 上的 Qt 4.8)

最佳答案

可能是我遗漏了什么,但如果您使用“:memory:”存储,为什么需要这样的检查。无论如何,您的数据库在进程重启后将为空。

关于sqlite - 数据库表不存在,但在尝试创建它时和之后都存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16121234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com