Я использую SQLite 3.x, Qt 5.7, C ++, QSqlTableModel
, QTableView
классы. Стол sites
содержит уникальный url
колонка. Я хотел бы избежать избыточных выборок и минимизировать / исключить полный сброс моей модели в случае небольших изменений данных. Поэтому я предпочитаю использовать необработанные запросы SQL только для чтения и писать через QSqlRecord
в этом проекте. Я обновляю строку в модели путем изменения соответствующего QSqlRecord
пример. Но я должен выполнить линейный поиск записи для обновления (см. Псевдокод ниже):
for (int i = 0; i < rowCount(); ++i)
{
QSqlRecord current_record = record(i);
QString current_url = current_record.value("url").toString();
if (current_url == url)
{
//updates...
break;
}
}
Я хотел бы использовать внутренние средства SQLite для более быстрого поиска. Как я могу найти правильный идентификатор (назовем его found_id
) в SQLite для того, чтобы позвонить QSqlRecord record = row(found_id);
? Обратите внимание, что вставки и удаления также будут использоваться.
Вот упрощенный DDL:
CREATE TABLE sites (
id INTEGER PRIMARY KEY,
url VARCHAR UNIQUE NOT NULL
);
Задача ещё не решена.
Других решений пока нет …