【问题标题】:SQLite remove database errorSQLite 删除数据库错误
【发布时间】:2012-07-18 08:24:30
【问题描述】:

我有连接到数据库的小部件:

Widget::Widget(QWidget *parent)
{
    QString databaseName = "name";
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(databaseName);
    db.setHostName("localhost");
    if(!db.open())
        qDebug()<<"ret error";
}

现在我想在小部件关闭后删除数据库连接(目前我收到如下警告:QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection is still in use...)。我已经阅读了一些主题并尝试从它们中评估一些解决方案,但没有一个对我有用。我的代码:

void Widget::closeEvent(QCloseEvent *e)
{
    QSqlDatabase db = QSqlDatabase::database();
    QString connection = db.connectionName();
    db.close();
    QSqlDatabase::removeDatabase(connection);
    qDebug()<<"error: "<<db.lastError().text();
}

我得到的错误是:Driver not loaded Driver not loaded

这样做的正确方法是什么?

编辑:

另一种方法:

void Widget::someMethod()
{
    QSqlDatabase db = QSqlDatabase::database();
    QSqlQuery query(db);
    query.exec("some query");
}

【问题讨论】:

  • 您的系统中安装了 sqlite 库吗?
  • 是的,一切正常,我可以添加数据。调用查询并在表视图中查看。唯一的问题是关闭。 closeEvent() 中返回错误。

标签: c++ sqlite qt qtsql


【解决方案1】:

尝试在 addDatabase() 中提供连接名称参数(第二个参数),这应该可以解决您的问题。

你可以试试修改后的代码:

Widget::Widget(QWidget *parent)
{
    QString databaseName = "name";
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "test_db_connection" );
    db.setDatabaseName(databaseName);
    db.setHostName("localhost");
    if(!db.open())
        qDebug()<<"ret error";
}

这是我机器上用于 sqlite 数据库的完整工作代码,您可以用作参考:

local_db = QSqlDatabase::addDatabase("QSQLITE","localdb");
local_db.setDatabaseName("localdb.sqlite");
local_db_query = QSqlQuery(local_db);
local_db_query.prepare( "SELECT * FROM sample_table" );
local_db_query.exec();

【讨论】:

  • 添加它并获得:“QSqlQuery::exec: database not open”。数据库甚至没有打开。
  • 请使用sqllite文件名作为数据库名并检查。我的意思是使用“name.sqlite”或您计算机中的 sqlite 文件名
  • 这有帮助。我已经接受了答案。如果你能解释一下就好了。
  • 在 addDatabase 函数中,如果我们不提供连接名称,即第二个参数,则使用默认连接。所以这会导致警告。我希望它能解释。如果您有任何具体的疑问/疑问,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
  • 2015-04-18
相关资源
最近更新 更多