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

发布于 2022-09-05 00:55:26 字数 3009 浏览 22 评论 0

操作环境是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信息如下

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏夜暖风 2022-09-12 00:55:26

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文