一个问题是您指定了一个连接名称。
QSqlDatabase QSqlDatabase::addDatabase(const QString & type, const QString & connectionName = QLatin1String( defaultConnection ))
如果未指定connectionName,则新连接将成为默认连接
鉴于您的数据库连接不是默认连接,您需要告诉 QSqlQuery 要使用哪个数据库,即
QSqlQuery query(db);
query.exec("INSERT INTO users (id, username, balance, isAdmin)" "VALUES(3, 'somebody', 10000, 1)");
另一个“问题”是,使用 sqlite,您总是通过所进行的调用创建一个新数据库,因此问题不是数据库未打开,而是其内容不正确(因为如果您指定一个数据库,它将为空)不存在的文件名)。如果我接受你的代码并添加
qDebug() << query.lastError();
之后query.exec
它正确地抱怨说
QSqlError(1, "无法执行语句", "没有这样的表:用户")
如果我在插入查询之前包含一条创建表的语句
QSqlQuery createTable("create table users ( id INTEGER, username TEXT, balance REAL, isAdmin INTEGER)",db);
createTable.exec();
我正确地获取了新创建的数据库文件中的表,并且它包含您尝试插入的条目。
这有帮助吗?