C++ QSqlTableModel和SQLite中的快速行搜索

C++ QSqlTableModel和SQLite中的快速行搜索,c++,qt,sqlite,qt5,qsqltablemodel,C++,Qt,Sqlite,Qt5,Qsqltablemodel,我使用SQLite 3、x、Qt 5.7、C++、 qSQLTabLimoDele>代码>代码> qTable VIEW//Cuff>类。表sites包含唯一的url列。在小数据修改的情况下,我希望避免冗余选择并最小化/排除模型的完全重置。因此,在本项目中,我更喜欢使用只读原始SQL查询,并通过QSqlRecord编写。我通过更改相应的QSqlRecord实例来更新模型中的行。但我必须对记录进行线性搜索以进行更新(请参见下面的伪代码): 有许多变体,例如,使用映射变量,如QHash mapUrl

我使用SQLite 3、x、Qt 5.7、C++、<代码> qSQLTabLimoDele>代码>代码> qTable VIEW//Cuff>类。表
sites
包含唯一的
url
列。在小数据修改的情况下,我希望避免冗余选择并最小化/排除模型的完全重置。因此,在本项目中,我更喜欢使用只读原始SQL查询,并通过
QSqlRecord
编写。我通过更改相应的
QSqlRecord
实例来更新模型中的行。但我必须对记录进行线性搜索以进行更新(请参见下面的伪代码):


有许多变体,例如,使用映射变量,如
QHash mapUrlToRecord
。初始化后,我们可以通过
mapUrlToRecord.value(url)
从其url快速访问记录。在更新时,我们也会更改此变量。如果我们想从id访问记录,我们只需要使用整数作为键:
QHash-mapIdToRecord
无论如何,我认为从
QAbstractTableModel
重写
rowCount
columnCount
data
setData
方法的子类化更“真实”。例如,有很多变体,使用映射变量,如
QHash mapUrlToRecord
。初始化后,我们可以通过
mapUrlToRecord.value(url)
从其url快速访问记录。在更新时,我们也会更改此变量。如果我们想从id访问记录,我们只需要使用整数作为键:
QHash-mapIdToRecord
无论如何,我认为从
QAbstractTableModel
重写
rowCount
columnCount
data
setData
方法的子类化更“真实”。
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;
    }
} 
CREATE TABLE sites (
id                 INTEGER PRIMARY KEY,
url                VARCHAR UNIQUE NOT NULL
                         );