同步表结构
来源:互联网 发布:如何查找网络打印机 编辑:程序博客网 时间:2024/06/10 19:15
bool CDBStructSyncManagerSingleton::syncDBTableStruct(CDBTable *table, bool upgradeField)
{
nlassert(table != NULL);
std::vector<std::string> allTables;
allTables.insert(allTables.end(), table->_TableNames.begin(), table->_TableNames.end());
allTables.insert(allTables.end(), table->_BackupTableNames.begin(), table->_BackupTableNames.end());
for (uint32 i = 0; i < allTables.size(); i++)
{
std::string tableName = allTables[i];
std::string SQL = table->getCreateTableSQL(tableName);
if(!_Connection.query(SQL, false))
{
nlwarning("create table failed !!!!!!");
return false;
}
SQL.clear();
SQL = "DESC " + tableName;
if(!_Connection.query(SQL) )
{
nlwarning("desc table failed !!!!!!");
return false;
}
MSW::CStoreResult* result = _Connection.storeResult();
std::set<string> dbFields;
for (uint32 i= 0; i < result->getNumRows() ; i++)
{
result->fetchRow();
std::string fieldName;
result->getField(0, fieldName);
dbFields.insert(fieldName);
}
_Connection.freeResult();
delete result;
result = NULL;
CDBTable::TFiels::iterator iField = table->_Fields.begin();
for (;iField != table->_Fields.end(); ++iField)
{
SQL.clear();
if (dbFields.find(iField->_Name) != dbFields.end())
{
if (upgradeField)
{
SQL = table->getAlterTableModifyFieldSQL(iField->_Name, tableName);
}
else
{
continue;
}
}
else
{
SQL = table->getAlterTableAddFieldSQL(iField->_Name, tableName);
}
if (SQL.empty())
{
nlwarning(" get alter sql is empty");
return false;
}
if(!_Connection.query(SQL, false))
{
nlwarning("alter table failed !!!!!!");
return false;
}
}
CDBTable::TRepeatFields::iterator itRepeatField = table->_RepeatFields.begin();
for (; itRepeatField != table->_RepeatFields.end();++itRepeatField)
{
for (uint32 i = 0 ; i < itRepeatField->_Fields.size(); i++)
{
SQL.clear();
if (dbFields.find(itRepeatField->_Fields[i]) != dbFields.end())
{
if (upgradeField)
{
SQL = table->getAlterTableModifyFieldSQL(itRepeatField->_Fields[i], tableName);
}
else
{
continue;
}
}
else
{
SQL = table->getAlterTableAddFieldSQL(itRepeatField->_Fields[i], tableName);
}
if (SQL.empty())
{
nlwarning(" get alter sql is empty");
return false;
}
if(!_Connection.query(SQL, false))
{
nlwarning("alter table failed !!!!!!");
return false;
}
}
}
}
return true;
}
{
nlassert(table != NULL);
std::vector<std::string> allTables;
allTables.insert(allTables.end(), table->_TableNames.begin(), table->_TableNames.end());
allTables.insert(allTables.end(), table->_BackupTableNames.begin(), table->_BackupTableNames.end());
for (uint32 i = 0; i < allTables.size(); i++)
{
std::string tableName = allTables[i];
std::string SQL = table->getCreateTableSQL(tableName);
if(!_Connection.query(SQL, false))
{
nlwarning("create table failed !!!!!!");
return false;
}
SQL.clear();
SQL = "DESC " + tableName;
if(!_Connection.query(SQL) )
{
nlwarning("desc table failed !!!!!!");
return false;
}
MSW::CStoreResult* result = _Connection.storeResult();
std::set<string> dbFields;
for (uint32 i= 0; i < result->getNumRows() ; i++)
{
result->fetchRow();
std::string fieldName;
result->getField(0, fieldName);
dbFields.insert(fieldName);
}
_Connection.freeResult();
delete result;
result = NULL;
CDBTable::TFiels::iterator iField = table->_Fields.begin();
for (;iField != table->_Fields.end(); ++iField)
{
SQL.clear();
if (dbFields.find(iField->_Name) != dbFields.end())
{
if (upgradeField)
{
SQL = table->getAlterTableModifyFieldSQL(iField->_Name, tableName);
}
else
{
continue;
}
}
else
{
SQL = table->getAlterTableAddFieldSQL(iField->_Name, tableName);
}
if (SQL.empty())
{
nlwarning(" get alter sql is empty");
return false;
}
if(!_Connection.query(SQL, false))
{
nlwarning("alter table failed !!!!!!");
return false;
}
}
CDBTable::TRepeatFields::iterator itRepeatField = table->_RepeatFields.begin();
for (; itRepeatField != table->_RepeatFields.end();++itRepeatField)
{
for (uint32 i = 0 ; i < itRepeatField->_Fields.size(); i++)
{
SQL.clear();
if (dbFields.find(itRepeatField->_Fields[i]) != dbFields.end())
{
if (upgradeField)
{
SQL = table->getAlterTableModifyFieldSQL(itRepeatField->_Fields[i], tableName);
}
else
{
continue;
}
}
else
{
SQL = table->getAlterTableAddFieldSQL(itRepeatField->_Fields[i], tableName);
}
if (SQL.empty())
{
nlwarning(" get alter sql is empty");
return false;
}
if(!_Connection.query(SQL, false))
{
nlwarning("alter table failed !!!!!!");
return false;
}
}
}
}
return true;
}
0 0
- 同步MySQL表结构
- 同步表结构
- MySQL表结构同步工具
- ogg同步表结构不一致
- MySQL结构同步时分区表无法同步的问题
- mysql对比表结构对比同步,sqlyog架构同步工具
- sql 同步表结构 dll 触发器
- 不同表结构OGG数据同步
- python 手动同步mysql表结构脚本
- ORACLE数据库结构同步
- MySQL数据库结构同步
- MYSQL线下数据库表同步线上表结构
- VS2008 比较两个数据库的表结构差异,并同步
- [sql server] sql2005 通过 DDL触发器同步数据库表结构
- CET (树形结构递归查询)、两个表同步
- 使用Navicat实现MySQL数据库 表结构同步
- Navicat 实现同步sqlserver表结构到mysql
- 使用Navicat实现MySQL数据库 表结构同步
- mysql 启动失败
- 斐波那契算法的java实现
- dubbo源码解析(一): 扩展点加载(ExtensionLoader)
- 《将博客搬至51CTO》
- Android studio Apk signature scheme v2扫盲
- 同步表结构
- python numpy教程
- 网络通信_TCP客户端与服务器
- 【实验报告】C++第3次试验
- 分享内容到朋友圈微博等
- c++实验3-项目4
- webpack简单使用
- if 语句的运用
- 3.24二级web前小记