关于QT5 SQLITE中QSqlQuery::exec: database not open的问题的解决方法

最近在用QT5自带的SQLITE时,遇到一个无法创建查询的问题,具体表现为执行prepare()时会返回一个QSqlQuery::exec: database not open,以及使用.getlasterror时得到 driver not loaded 错误。具体解决方法为添加一行代码:

QSqlQuery sql_query(database_);

即可解决问题。

下面给出相关程序代码:

if (QSqlDatabase::contains("qt_sql_default_connection")) //判断是否存在这个连接
    {
        database_ = QSqlDatabase::database("qt_sql_default_connection");
    }
    else
    {
        database_ = QSqlDatabase::addDatabase("QSQLITE"); //是SQLite对应的驱动名,不能改 第二个参数被省略了,
        database_.setUserName("HDU");        //第二个参数的默认参数就是上面提到的Qt默认连接名称qt_sql_default_connection。
        database_.setDatabaseName("MyDataBase.db");//如果需要使用自定义的连接名称(如果程序需要处理多个数据库文件的话就会这样),则应该加入第二个参数
        database_.setPassword("123456");
    }
 
  
    if(!database_.open())
    {
        QMessageBox::warning(this,"warning","open database failed.");
    }
    //用完数据库记得关闭
    
    QSqlQuery sql_query(database_); //这句话非常重要!!!!!!!!!!!!!!!
    
    if (!sql_query.exec("CREATE TABLE Motor ("
                    "id INTEGER PRIMARY KEY AUTOINCREMENT,"
                    "TIME VARCHAR,"
                    "SPEED INT)"))
    {
        QSqlError warningText= sql_query.lastError();
        QMessageBox::warning(this,"warning",warningText.text());
        return false;
    }

你可能感兴趣的:(QT5)