首页 > 解决方案 > 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()功能是否正常工作

标签: c++sqliteqt

解决方案


您的插入查询无效。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;

输出如下: 输出


推荐阅读