c++ - Qt 是不读 Sqlite
问题描述
我在fedora linux上,想试试sqlite
我不明白这里出了什么问题……我所做的是一个简单的数据库,想显示内容。
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
if (!QSqlDatabase::isDriverAvailable("QSQLITE"))
{
qDebug() << "Error on init";
return -1;
}
QSqlDatabase bd = QSqlDatabase::addDatabase("QSQLITE");
bd.setDatabaseName("Students.db");
if (!bd.open())
{
qDebug() << bd.lastError().text();
return -2;
}
QSqlQuery q;
if (!q.exec("create table if not exists students"
"(id integer not null primary key autoincrement,"
" name varchar(255) not null,"
" age integer not null)"))
{
qDebug() << q.lastError().text();
return -3;
}
q.exec("insert into students (name, age) values ('Renato', 24 )");
q.exec("insert into students (name, age) values ('Olive', 40 )");
q.exec("insert into students (name, age) values ('Cucuo', 19 )");
q.exec("insert into students (name, age) values ('Renzen', 32 )");
q.exec("insert into students (name, age) values ('Polai', 21 )");
q.exec("insert into students (name, age) values ('Mogo', 29 )");
q.exec("select * from students");
while (q.next())
{
qDebug() << q.value("id").toInt();
qDebug() << q.value("name").toString();
qDebug() << q.value("age").toInt();
}
bd.close();
return a.exec();
}
该程序编译完美,没有错误,只显示一个空控制台,没有提示行。
更新
我可以通过命令行访问数据库,它表明查询已成功完成。
现在我想知道该qDebug()
功能是否正常工作
解决方案
您的插入查询无效。if not exists
不能在插入查询中使用。您可以在插入查询后看到 lastError().text()。然后,如果您删除if not exists
所有插入查询中的部分,一切都会做得很好。但是,您似乎不想插入重复值。正确的?如果是这样,您必须将“名称”列定义为“唯一”列。通过这种方式,如果一个学生已经被插入,它将永远不会在插入查询中被复制。
if (!QSqlDatabase::isDriverAvailable("QSQLITE"))
{
qDebug() << "Error on init";
return -1;
}
qDebug() << "1";
QSqlDatabase bd = QSqlDatabase::addDatabase("QSQLITE");
bd.setDatabaseName("Students.db");
if (!bd.open())
{
qDebug() << bd.lastError().text();
return -2;
}
qDebug() << "2";
QSqlQuery q;
if (!q.exec("create table if not exists students"
"(id integer not null primary key autoincrement,"
" name varchar(255) not null unique,"
" age integer not null)"))
{
qDebug() << q.lastError().text();
return -3;
}
qDebug() << "3";
q.exec("insert into students (name, age) values ('Renato', 24 )");
q.exec("insert into students (name, age) values ('Olive', 40 )");
q.exec("insert into students (name, age) values ('Cucuo', 19 )");
q.exec("insert into students (name, age) values ('Renzen', 32 )");
q.exec("insert into students (name, age) values ('Polai', 21 )");
q.exec("insert into students (name, age) values ('Mogo', 29 )");
qDebug() << "4";
q.exec("select * from students");
while (q.next())
{
qDebug() << q.value("id").toInt();
qDebug() << q.value("name").toString();
qDebug() << q.value("age").toInt();
}
qDebug() << "5";
bd.close();
return 0;
推荐阅读
- python - 限制 Flask REST API 的速率
- r - R 将字符转换为时间
- python - 在 Python 中标记正则表达式组的问题
- python - 用 Python 编写 Discord 机器人 - 如何让它每天在特定时间发送消息?
- java - Android:设置闹钟不触发
- javascript - 检查 ISO 字符串日期是否在两个日期之间
- angular - 如何使用角度显示和隐藏 2 个选项卡窗格引导程序
- node.js - 调用 readline 提示(然后是自身)的循环只调用一次然后退出程序(Node.js)
- wpf - 如何设置静态资源的依赖属性?
- python - python中3d numpy数组的3d绘图