我具有以下的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