我在QT中访问我的sqlite数据库时遇到问题。我已将数据库存储在项目文件夹中,并完成以下操作:
.pro file
RESOURCES += \
sqfiles.SOURCES = db.sqlite
sqfiles.path = .
DEPLOYMENT += sqfiles
我可以打开我的数据库并声明它有效但没有表格,因此我无法执行任何搜索命令并在运行此代码后出现以下错误:
QSqlQuery query("SELECT * FROM shifts", db);
if(!query.exec())
{
qDebug() << query.lastError().text();
qDebug() << "ERROR" << endl;
return;
}
while(query.next())
{
QString name = query.value(1).toString();
qDebug() << name << endl;
}
消息:“无查询无法获取行”
当我在QT项目之外打开这个数据库时,我有多个表,可以运行查询。
关于出了什么问题的任何建议或想法?为什么我认为我的数据库是空的?
答案 0 :(得分:2)
这是我创建表的查询(使用SQLITE数据库浏览器程序)。
CREATE TABLE shifts (ID INTEGER PRIMARY KEY, NUMBER NUMERIC, TEXT TEXT);
INSERT INTO shifts VALUES(1,123,'ABC');
INSERT INTO shifts VALUES(2,456,'DEF');
这是我的Qt代码。
#include <QApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("database.db");
db.open();
QSqlQuery query;
query.exec("SELECT * from shifts");
while (query.next())
{
qDebug() << "NUMBER" << query.value(0).toString()
<< "TEXT" << query.value(1).toString();
}
return a.exec();
}
输出
NUMBER "1" TEXT "123"
NUMBER "2" TEXT "456"
我没有在项目文件中添加SQLite信息。相反,我使用了QSqlDatabase
并添加了QT += sql
。哦,是的,确保你有SQLITE驱动程序。像这样测试。
qDebug() << QSqlDatabase::drivers();
这是我的输出。
("QSQLITE", "QMYSQL3", "QMYSQL")
待办事项