这个怎么整啊,一直是QSqlQuery::prepare: database not open QSqlQuery::prepare: database not open
只要一运行就报这个,刚学,不知道咋改
这个错误通常是因为没有正确打开数据库连接导致的。您需要确保在使用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了,咋还能往下跑?