Qt——Sqlite异构数据库同步

上一篇博文中介绍了同构数据库同步的方法,本文将继续记录异构数据库同步的思路。
上一篇:Qt——Sqlite同构数据库同步
github地址:https://github.com/JuicyActive01Gilbert/SqliteManager

前言

本文介绍的只适合待同步的数据库内容比原数据库数据量大的情况,也就是只是向下兼容。

思路

1、获取原数据库A、待同步数据库B中的所有表
2、得到B中新增的表并在数据库A中创建
3、遍历所有表,得到并新建A中没有的字段

相关代码

void SqlSynchronize::createSynTales(const QStringList &tables)
{
    foreach (QString table, tables) {
        if(m_pDB->getTableInfo(table).count() != 0){
            continue;
        }else {
            QStringList parentTables = m_pSynDB->getForeignTables(table);

            if(parentTables.count() != 0){
                createSynTales(parentTables);
            }
            m_pDB->createTable(table,m_pSynDB->getTableInfo(table),m_pSynDB->getForeignKeys(table));
        }
    }
}

void SqlSynchronize::createSynTablesColums(const QStringList &synTables)
{
    QStringList tables = m_pDB->getTableList();
    foreach (QString table, synTables) {
        if(!tables.contains(table)){
            continue;
        }

        QVariantList synTableInfo = m_pSynDB->getTableInfo(table);
        foreach (QVariant synCol, synTableInfo) {
            if(m_pDB->haveTableColum(table,synCol.toMap())){
                continue;
            }
            if(!m_pDB->addColumInTable(table,synCol.toMap())){
                emit haveError(m_pDB->lastErrorString());
            }
        }
    }
}
发布了28 篇原创文章 · 获赞 4 · 访问量 7378

猜你喜欢

转载自blog.csdn.net/JuicyActiveGilbert/article/details/105139655