如何检查数据库字段为NULL

时间:2018-04-06 03:15:50

标签: c++ qt sqlite qsqlquery

我有这个代码片段调用数据库表,我在那里执行一些操作,比如分配一个房间,字段HostelName是NULL。

但是在尝试了许多方法后,我的代码中没有真正观察到NULL字段,并且执行总是进入第一个IF语句,即使该字段为NULL。有没有办法检查字段是否为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());
}

1 个答案:

答案 0 :(得分:0)

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

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

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

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