我具有以下的Qt/C++方法:SELECT LAST_INSERT_ID()返回零
quint64 UeBillModel::ueGetNextPickupIndex()
{
quint64 pickupIndex=0;
if(!this->ueDatabase().isOpen())
{
this->ueConnectToDatabase();
} // if
this->setQuery(UePosDatabase::UeSqlQueries::UeInsertNewBill::SQL_QUERY_CALC_NEXT_PICKUP_NUMBER,
this->ueDatabase());
if(this->lastError().isValid())
{
qDebug() << this->lastError();
pickupIndex=-1;
}
else
{
this->setQuery(UePosDatabase::UeSqlQueries::UeInsertNewBill::SQL_QUERY_GET_NEXT_PICKUP_NUMBER,
this->ueDatabase());
if(this->lastError().isValid())
{
qDebug() << this->lastError();
pickupIndex=-1;
}
else
{
pickupIndex=this->record(0).value(0).toUInt();
} // if
} // if
return pickupIndex;
} // ueGetNextPickupIndex
一旦执行该方法时,它返回0
。正如你所看到的,它执行两个查询:
static const QString SQL_QUERY_CALC_NEXT_PICKUP_NUMBER="UPDATE "+UePosDatabase::UeTableNames::TABLE_PICKUP_NUMBER+ " SET ID = LAST_INSERT_ID(ID+1)";
static const QString SQL_QUERY_GET_NEXT_PICKUP_NUMBER="SELECT LAST_INSERT_ID()";
有了第一个,我更新内表PICKUP_NUMBER
,并与第二我想最后得到插入ID的申请。如果我直接在mysql服务器内部执行这两条语句,我会得到正确的值。那么为什么方法返回0
?
返回值来确定有用的职位,但我应该如何以“正确”的方式解决这种情况? – KernelPanic
这完全取决于你为什么要将价值存储在第一位。正如我在文章中所说的,只有在您需要外键时才应该这样做。 – RobbieE