gpt4 book ai didi

c++ - QSqlDatabase::open() 总是返回 true

转载 作者:太空狗 更新时间:2023-10-29 23:15:14 25 4
gpt4 key购买 nike

我正在尝试使用 Qt 框架连接到 sql 数据库。

不幸的是,db.open() 总是返回 true(您可以设置任何密码、主机名等...),尽管没有建立连接(?)。我从对数据库没有任何影响的查询中得出这一点。

我在 Ubuntu 14.04 上使用 LAMPP。

我有以下代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QApplication>
#include <QSql>
#include <QSqlDatabase>
#include <QMessageBox>
#include <QSqlQuery>


void MainWindow::on_ButtonSQL_clicked()
{

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "con1");
db.setHostName("localhost");
db.setDatabaseName("kinectshop2015");
db.setUserName("root");
db.setPassword("");

QMessageBox msgBox;

if (db.open()) {
msgBox.setText("Yay! Your database host is "+db.hostName()+" .\n"+" The name of the database is "+db.databaseName()+".");
msgBox.exec();
}

QSqlQuery query;
query.exec("INSERT INTO users (id, username, balance, isAdmin)" "VALUES(3, 'somebody', 10000, 1)");
}

最佳答案

一个问题是您要指定连接名称。

QSqlDatabase QSqlDatabase::addDatabase(const QString & type, const QString & connectionName = QLatin1String( defaultConnection ))

If connectionName is not specified, the new connection becomes the default connection

鉴于您的数据库连接不是默认连接,您需要告诉 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, "Unable to execute statement", "no such table: users")

如果我在插入查询之前包含一个创建表的语句

QSqlQuery createTable("create table users ( id INTEGER, username TEXT, balance REAL, isAdmin INTEGER)",db);
createTable.exec();

我在新创建的 db 文件中正确地获取了该表,并且它具有您要插入的条目。

这有帮助吗?

关于c++ - QSqlDatabase::open() 总是返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30139103/

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