【问题标题】:How To Check Database Field is NULL如何检查数据库字段是否为 NULL
【发布时间】:2018-09-16 00:09:06
【问题描述】:

我有这段代码 sn-p 调用数据库表,我将在其中执行一些操作,例如分配房间,字段 HostelName 为 NULL。

但是在尝试了许多方法后,我的代码中并没有真正观察到 NULL 字段,即使该字段为 NULL,执行总是进入第一个 IF 语句。真的有办法检查一个字段是否为 NULL 并相应地执行一些操作吗?我在 Qt 和数据库方面有点新手。

注意:

MatricNo 是主键。显然 SELECT 语句只能返回一条记录(我猜)。

qry.prepare("SELECT * from student where matricno='"+matric+"' and HostelName IS NULL");
qry.exec();
QSqlRecord rec = qry.record();
if(rec.isNull("HostelName"))
{
    qry.prepare("UPDATE student set HostelName='"+hostelName+"',RoomNo='"+roomNo+"' where MatricNo='"+matric+"'");
    if(qry.exec())
    {
        qry.prepare("UPDATE Rooms set OccupantsNo=OccupantsNo-1 where HostelName='"+hostelName+"' and roomID='"+roomNo+"'");
        if(qry.exec())
        {
            QMessageBox::critical(this,tr("Error"),tr("Student Room Allocated"));
        }
        else
        {
            QMessageBox::critical(this,tr("Error"),qry.lastError().text());
        }
    }
    else
    {
        QMessageBox::critical(this,tr("Error"),qry.lastError().text());
    }
}
else
{
    QMessageBox::critical(this,tr("Error"),"Cant Allocate Room: \nStudent Room Already Alloted\nTo Re-Allocate, Go to Edit Student Details");//qry.lastError().text());
}

【问题讨论】:

标签: c++ qt sqlite qsqlquery


【解决方案1】:

考虑您的代码中的以下问题:

首先:您的rec 只是空!您在qry.exec() 之后立即分配QSqlRecord rec .. 结果当前位于第一条记录之前,您必须将查询定位到第一条记录QSqlQuery::next() .. 至少需要这样做让你的代码工作。

qry.exec();
qry.next();
QSqlRecord rec = qry.record();

第二:你的sql语句已经根据HostelName IS NULL选择了 但是您正在检查rec.isNull("HostelName") 的结果...这只是无用且不必要的,您可能想要rec.isNull("RoomNo") 或其他东西或什么都没有!但在您的 select 语句之后,HostelName 的记录值始终为NULL

【讨论】:

    猜你喜欢
    • 2011-09-13
    • 2021-06-27
    • 1970-01-01
    • 2017-11-22
    • 2010-11-13
    • 2013-04-27
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多