#include "PrepareJobCfgDao.h" PrepareJobCfgDao::PrepareJobCfgDao(SQLite::Database* pdb) : BaseDao(pdb) { } PrepareJobCfgDao::~PrepareJobCfgDao() { } void PrepareJobCfgDao::CreateTable() { if (m_pDB->tableExists(PrepareJobCfg::TABLE_NAME))return; char buffer[512]; string createsql = "CREATE TABLE %s(%s INTEGER,%s INTEGER,%s INTEGER,UNIQUE(%s,%s))"; sprintf_s(buffer, sizeof(buffer), createsql.c_str(), PrepareJobCfg::TABLE_NAME.c_str(), PrepareJobCfg::FIELD_MACHINE_TYPE.c_str(), PrepareJobCfg::FIELD_LAYER_INDEX.c_str(), PrepareJobCfg::FIELD_IS_PRINTABLE.c_str(), PrepareJobCfg::FIELD_MACHINE_TYPE.c_str(), PrepareJobCfg::FIELD_LAYER_INDEX.c_str() ); m_pDB->exec(buffer); } void PrepareJobCfgDao::Find(int mt,map& cfgs) { char buffer[1024]; string strsql = "SELECT %s,%s FROM %s WHERE %s=%d"; sprintf_s(buffer, sizeof(buffer), strsql.c_str(), PrepareJobCfg::FIELD_LAYER_INDEX.c_str(), PrepareJobCfg::FIELD_IS_PRINTABLE.c_str(), PrepareJobCfg::TABLE_NAME.c_str(), PrepareJobCfg::FIELD_MACHINE_TYPE.c_str(),mt); SQLite::Statement query(*m_pDB, buffer); while (query.executeStep()) { cfgs[query.getColumn(PrepareJobCfg::FIELD_LAYER_INDEX.c_str()).getInt()] = (query.getColumn(PrepareJobCfg::FIELD_IS_PRINTABLE.c_str()).getInt() > 0 ? true : false); } } void PrepareJobCfgDao::Save(int mt, map& cfgs) { char buffer[1024]; string strsql = "SELECT %s,%s FROM %s WHERE %s=%d"; sprintf_s(buffer, sizeof(buffer), strsql.c_str(), PrepareJobCfg::FIELD_LAYER_INDEX.c_str(), PrepareJobCfg::FIELD_IS_PRINTABLE.c_str(), PrepareJobCfg::TABLE_NAME.c_str(), PrepareJobCfg::FIELD_MACHINE_TYPE.c_str(), mt); SQLite::Statement query(*m_pDB, buffer); map dbMap; map insertMap; map updateMap; while (query.executeStep()) { dbMap[query.getColumn(PrepareJobCfg::FIELD_LAYER_INDEX.c_str()).getInt()] = (query.getColumn(PrepareJobCfg::FIELD_IS_PRINTABLE.c_str()).getInt() > 0 ? true : false); } for (map::iterator it = cfgs.begin(); it != cfgs.end();it++) { if (dbMap.find(it->first) == dbMap.end()) { insertMap[it->first] = it->second; } else { updateMap[it->first] = it->second; } } string updateSql = "UPDATE %s SET %s=%d WHERE %s=%d AND %s=%d"; for (map::iterator it = updateMap.begin(); it != updateMap.end();it++) { sprintf_s(buffer, sizeof(buffer), updateSql.c_str(), PrepareJobCfg::TABLE_NAME.c_str(), PrepareJobCfg::FIELD_IS_PRINTABLE.c_str(),it->second?1:0, PrepareJobCfg::FIELD_MACHINE_TYPE.c_str(),mt,PrepareJobCfg::FIELD_LAYER_INDEX.c_str(),it->first); m_pDB->exec(buffer); } string insertSql = "INSERT INTO %s(%s,%s,%s) VALUES(%d,%d,%d)"; for (map::iterator it = insertMap.begin(); it != insertMap.end(); it++) { sprintf_s(buffer, sizeof(buffer),insertSql.c_str(),PrepareJobCfg::TABLE_NAME.c_str(),PrepareJobCfg::FIELD_MACHINE_TYPE.c_str(), PrepareJobCfg::FIELD_LAYER_INDEX.c_str(),PrepareJobCfg::FIELD_IS_PRINTABLE.c_str(),mt,it->first,it->second?1:0); m_pDB->exec(buffer); } }