Получение идентификатора добавленной записи
После успешного INSERT метод QSqlQuery::lastInsertId() возвращает идентификатор последней вставленной строки, если это поддерживается драйвером базы данных.
QSqlQuery query(database);
query.prepare("INSERT INTO tasks (title) VALUES (:title)");
query.bindValue(":title", title);
if (!query.exec()) {
qWarning() << query.lastError().text();
return;
}
const QVariant id = query.lastInsertId();
if (!id.isValid()) {
// Проверьте поддержку драйвера и схему таблицы.
}Всегда проверяйте результат exec() до чтения ID. Поддержка и представление значения зависят от драйвера; не предполагайте, что результат обязательно целое число определённого размера. Преобразуйте QVariant в нужный тип только после проверки.
Не заменяйте возврат ID запросом MAX(id)
Запрос SELECT MAX(id) небезопасен при параллельных вставках: он может вернуть ID другой транзакции. Используйте lastInsertId() сразу после вставки или предусмотренный конкретной СУБД механизм возврата строки. Если драйвер не поддерживает метод, проверьте документацию для используемого backend.