#include "dal.h" #include #include #include #include #include #include "model.h" bool DAL::updateWhiteList(QString ip, QList portList) { if (portList.empty()) return false; // 先找找看指定项存不存在 QString sql = QString("SELECT * FROM whitelist WHERE IP=? AND Port in (%1").arg(portList[0]); for (int i = 1; i < portList.size(); ++i) sql += QString(",%1").arg(portList[i]); sql += ");"; QSqlQuery query; query.prepare(sql); query.addBindValue(ip); if(!query.exec()) { qCritical()< whitelist; while(query.next()) whitelist.append(WhiteListItem(query.value(0).toInt(), query.value(1).toString(), query.value(2).toInt(), query.value(3).toDateTime())); // 开始事务 QSqlDatabase database = QSqlDatabase::database(QSqlDatabase::defaultConnection); database.transaction(); // 检查数据库中的白名单 for (int i = 0; i < whitelist.size(); ++i) { // 如果要更新的已经存在,则update if (portList.contains(whitelist[i].Port)) { query.prepare("UPDATE whitelist SET LastUpdateTime = datetime(CURRENT_TIMESTAMP,'localtime') WHERE IP=? AND Port=?"); query.addBindValue(ip); query.addBindValue(whitelist[i].Port); if(!query.exec()) { qCritical()< DAL::getWhiteList(QString ip) { QList whitelist; QString sql = QString("SELECT * FROM whitelist WHERE IP=?"); QSqlQuery query; query.prepare(sql); query.addBindValue(ip); if(!query.exec()) { qCritical()< ports) { QString portStr = QString("%1").arg(ports[0]); for (int i = 0; i < ports.length(); ++i) portStr += QString(",%1").arg(ports[i]); QString sql = QString("DELETE FROM whitelist WHERE IP=? AND Port in (%1)").arg(portStr); QSqlQuery query; query.prepare(sql); query.addBindValue(ip); if(!query.exec()) qCritical()<