qt使用sqlite3,对数据库操作无响应

操作环境是Mac OS, Qt5.8。
面对的问题是,在代码外,我建好了user.db数据库文件,已经进行了建表
create data(user varchar(50),passwd varchar(50))
插入了数据('admin','123456').
但是在Qt代码中
select * from data,得到的结果始终为空。

我尝试着在代码里进行建表,插入数据操作,但运行结果依旧为空。可见附的运行qDebug信息。
请问,是我的数据库环境配置问题还是代码上忘了什么。

#include "databasecontrol.h"
#include "centralairconditioner.h"

databaseControl::databaseControl()
{
    //qDebug() << QSqlDatabase::drivers();
    QFile testFile("user.db");
   if (testFile.exists())
       qDebug() << "user.db exists";
   else
       qDebug() << "user.db doesn't exist.";

    //路径这里存在问题,为什么添加了qrc之后依旧不需要前缀就可以使用了呢?
    if(Connect("user.db",user))
    {
        qDebug() << "Database user Create Successfully!";
    }
    else
    {
        qDebug() << "Database user Create Failed!";
    }

//    if(Connect("airConditioner.db", airConditioner)){
//        qDebug() << "Database airConditioner Create Successfully!";
//    }
//    else{
//        qDebug() << "Database airConditioner Create Failed!";
//    }
    Init();
}

void databaseControl::Init()
{
    //query = new QSqlQuery;
    qDebug() << __func__ << "is running.";
    QSqlQuery create("create table data{\
                     user varchar(50) primary key,\
                     passwd varchar(50)\
                    }");
    create.exec();
    QSqlQuery test("insert into data (user,passwd) values('admin','123456')", user);
    test.exec();
    QSqlTableModel model;
    model.setTable("data");
    if(model.select())
    {
        QSqlRecord record = model.record(0);
        QString name = record.value("user").toString();
        QString passwd = record.value("passwd").toString();
        qDebug() << name << passwd;
    }
    queryAdmin = new QSqlQuery;
    queryAdmin->exec("select * from data");
    while(queryAdmin->next())
    {
        //qDebug() << queryAdmin->;
        admin.SetUser(queryAdmin->value(0).toString());
        admin.SetPasswd(queryAdmin->value(1).toString());
        qDebug() << queryAdmin->value(0).toString();
        qDebug() << queryAdmin->value(1).toString();
    }
    qDebug() << admin.GetUser() << admin.GetPasswd();
}

bool databaseControl::Connect(const QString &dbName, QSqlDatabase &db)
{
    qDebug() << __func__ << "is running.";
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(dbName);
    if(!db.open())
    {
        QMessageBox::warning(0, QObject::tr("Database Error"),
        db.lastError().text());
        qDebug() << "Database open error!";
        return false;
    }
    else
    {
        return true;
    }
}

代码结构图如下

qDebug信息如下

阅读 4.7k
1 个回答

没有对query进行finish(),每次exec后加一行query.finish()即可

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题