QSqlQuery::prepare: database not open

这个怎么整啊,一直是QSqlQuery::prepare: database not open QSqlQuery::prepare: database not open
只要一运行就报这个,刚学,不知道咋改

img

img

这个错误通常是因为没有正确打开数据库连接导致的。您需要确保在使用QSqlQuery之前已经打开了数据库连接。请检查您的代码是否正确打开了数据库连接,如果没有,请尝试以下代码:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("mydatabase.db");
if (!db.open()) {
    qDebug() << "Failed to open database";
    return;
}

这段代码使用SQLite数据库作为示例,并将数据库名称设置为“mydatabase.db”。如果您使用的是不同的数据库,请相应地更改数据库类型和名称。


#include <QDebug>
#include <QMessageBox>
#include <QApplication>
#include <QSqlDatabase>
#include <QSqlQuery>

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

    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); // 数据库驱动类型为 SQL Server
    qDebug() << "ODBC driver?" << db.isValid();

    QString dsn = QString::fromLocal8Bit("mtest"); // 数据源名称
    db.setHostName("localhost"); // 选择本地主机,127.0.0.1
    db.setDatabaseName(dsn); // 设置数据源名称
    db.setUserName("sa"); // 登录用户
    db.setPassword("123456"); // 密码

    if (!db.open())
    {
        qDebug() << db.lastError().text();
        QMessageBox::critical(0, QObject::tr("Database Error"), db.lastError().text()); // 打开失败
        return -1;
    }
    else
    {
        qDebug() << "Database opened successfully!";
    }

    QSqlQuery query(db);

    // 创建用户表
    query.exec("CREATE TABLE users (id INTEGER PRIMARY KEY, username TEXT, password TEXT)");

    // 创建管理员表
    query.exec("CREATE TABLE admins (id INTEGER PRIMARY KEY, username TEXT, password TEXT)");

    // 插入用户数据
    query.prepare("INSERT INTO users (username, password) VALUES (:username, :password)");
    query.bindValue(":username", "10000");
    query.bindValue(":password", "123456");
    query.exec();

    // 插入管理员数据
    query.prepare("INSERT INTO admins (username, password) VALUES (:username, :password)");
    query.bindValue(":username", "admini");
    query.bindValue(":password", "111111");
    query.exec();

    return a.exec();
}

这主函数在5行就return了,咋还能往下跑?