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信息如下

回答:

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

以上是 qt使用sqlite3,对数据库操作无响应 的全部内容, 来源链接: utcz.com/p/193116.html

回到顶部