上一篇博文中介绍了同构数据库同步的方法,本文将继续记录异构数据库同步的思路。
上一篇: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());
}
}
}
}