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