#include "dataBase.h" #include #include #include #include #include #include #include #include #include DataBase* DataBase::instance = nullptr; int DataBase::_id = 0; DataBase::DataBase() { m_sFileName = QString("setting.xml"); initial(); //createProjectDB(); //initialProjectDB(); createProjectManager(); } DataBase::~DataBase() { QString connectionName = QSqlDatabase::database().connectionName(); QSqlDatabase::removeDatabase(connectionName); } void DataBase::initial() { readXML(); if (QSqlDatabase::contains(_DataBaseName)) db = QSqlDatabase::database(_DataBaseName); else db = QSqlDatabase::addDatabase(_DataBaseType,_DataBaseName); db.setDatabaseName(_DataBaseName); db.setHostName(_HostName); db.setPort(_Port); // 需要改成自己的用户名和密码 db.setUserName(_UserName); db.setPassword(_PassWord); if (db.open()) { qDebug()<<"baseDB success"; } else { qDebug()<<"baseDB failed"; } } /*bool DataBase::createProjectDB() { QSqlQuery query(db); QString sql = QString("CREATE DATABASE %1").arg(_ProjectDB); if (!query.exec(sql)) { qDebug() << "创建数据库失败:" << query.lastError().text(); return false; } return true; } void DataBase::initialProjectDB() { if (QSqlDatabase::contains(_ProjectDB)) prodb = QSqlDatabase::database(_ProjectDB); else prodb = QSqlDatabase::addDatabase(_DataBaseType,_ProjectDB); prodb.setDatabaseName(_ProjectDB); prodb.setHostName(_HostName); prodb.setPort(_Port); // 需要改成自己的用户名和密码 prodb.setUserName(_UserName); prodb.setPassword(_PassWord); if (prodb.open()) { qDebug()<<"ProjectDB success"; } else { //qDebug()<<"ProjectDB failed"; qDebug()< id ? structID.componentId:id; } } qry.finish(); success = qry.exec("SELECT id FROM station"); if (!success) { qDebug()< id ? structID.stationId:id; } } qry.finish(); success = qry.exec("SELECT id FROM page"); if (!success) { qDebug()< id ? structID.pageId:id; } } qry.finish(); success = qry.exec("SELECT id FROM grid"); if (!success) { qDebug()< id ? structID.gridId:id; } } qry.finish(); success = qry.exec("SELECT id FROM zone"); if (!success) { qDebug()< id ? structID.zoneId:id; } } qry.finish(); success = qry.exec("SELECT id FROM topologic"); if (!success) { qDebug()< id ? structID.topoId:id; } } qry.clear(); } } bool DataBase::insertComponent(QUuid uuid,QString nspath,QString tag,QString name,QString description,QString grid,QString zone,QString station,int type,bool inService,int state,QJsonObject connected_bus,QJsonObject label,QJsonObject context,int page_id,int op) { if(db.open()) { QSqlQuery qry(db); /*QJsonDocument busDoc(connected_bus); QString strBus = busDoc.toJson(QJsonDocument::Compact); QJsonDocument labelDoc(label); QString strLabel = labelDoc.toJson(QJsonDocument::Compact);*/ QJsonDocument contextDoc(context); QString strCon = contextDoc.toJson(QJsonDocument::Compact); /*qry.prepare("INSERT INTO component(global_uuid, nspath, tag, name, description, grid, zone, station, type, in_service, state, connected_bus, label, context, page_id, op, ts) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); qry.bindValue(0,uuid); qry.bindValue(1,nspath); qry.bindValue(2,tag); qry.bindValue(3,name); qry.bindValue(4,description); qry.bindValue(5,grid); qry.bindValue(6,zone); qry.bindValue(7,station); qry.bindValue(8,type); qry.bindValue(9,inService); qry.bindValue(10,state); qry.bindValue(11,strBus); qry.bindValue(12,strLabel); qry.bindValue(13,strCon); qry.bindValue(14,page_id); qry.bindValue(15,op); qry.bindValue(16,QDateTime::currentDateTime());*/ qry.prepare("INSERT INTO component(global_uuid, tag, name, grid, zone, station, type, context, page_id, op, ts) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); qry.bindValue(0,uuid); qry.bindValue(1,tag); qry.bindValue(2,name); qry.bindValue(3,grid); qry.bindValue(4,zone); qry.bindValue(5,station); qry.bindValue(6,type); qry.bindValue(7,strCon); qry.bindValue(8,page_id); qry.bindValue(9,op); qry.bindValue(10,QDateTime::currentDateTime()); bool res = qry.exec(); QString str = qry.lastQuery(); const QVariantList list = qry.boundValues(); for (qsizetype i = 0; i < list.size(); ++i) qDebug() << i << ":" << list.at(i).toString(); if(!res) { qDebug()< DataBase::getAllComponents() { QList lst; if(db.open()) { QSqlQuery qry(db); qry.prepare("SELECT id, global_uuid, tag, name, grid, zone, station, type, context, page_id, op FROM component"); bool res = qry.exec(); QString str = qry.lastQuery(); if(!res) { qDebug()< 0) return true; else return false; qry.clear(); } } return false; } bool DataBase::deleteComponent(QString uuid) { if(db.open()) { QSqlQuery qry(db); qry.prepare("DELETE FROM component WHERE global_uuid = ?"); qry.bindValue(0,uuid); bool res = qry.exec(); QString str = qry.lastQuery(); if(!res) { qDebug()<open(QIODevice::ReadOnly | QFile::Text)) { QMessageBox::information(NULL, QString("title"), QString::fromWCharArray(L"配置文件打开错误")); return; } QXmlStreamReader* m_pReader = new QXmlStreamReader(pFile); while (!m_pReader->atEnd() && !m_pReader->hasError()) { m_pReader->lineNumber(); QXmlStreamReader::TokenType token = m_pReader->readNext(); if (token == QXmlStreamReader::StartDocument) continue; //qDebug() << m_pReader->name(); if (m_pReader->isStartElement()) { if(m_pReader->name() == QString("DataBase")) { QXmlStreamAttributes attributes = m_pReader->attributes(); QString tpe = attributes.value("Type").toString(); QString sName = attributes.value("Name").toString(); //QString sProDB = attributes.value("ProjectDB").toString(); if (tpe == QString("PostgreSQL")) { _DataBaseType = QString("QPSQL"); _DataBaseName = sName; //_ProjectDB = sProDB; } } else if(m_pReader->name() == QString("HostName")) { _HostName = m_pReader->readElementText(); } else if(m_pReader->name() == QString("Port")) { _Port = m_pReader->readElementText().toInt(); } else if(m_pReader->name() == QString("UserName")) { _UserName = m_pReader->readElementText(); } else if(m_pReader->name() == QString("Password")) { _PassWord = m_pReader->readElementText(); } } m_pReader->readNext(); } if (m_pReader->hasError()) { qDebug() << m_pReader->errorString(); } m_pReader->clear(); delete m_pReader; m_pReader = NULL; pFile->close(); delete pFile; pFile = NULL; } DataBase* DataBase::GetInstance() { if(instance == nullptr) { instance = new DataBase(); } return instance; } QJsonObject DataBase::QstringToJson(QString jsonString) { QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonString.toUtf8().data()); if(jsonDocument.isNull()) { qDebug()<< "String NULL"<< jsonString.toLocal8Bit().data(); } QJsonObject jsonObject = jsonDocument.object(); return jsonObject; } //=================================元模=============================================// bool DataBase::getAttributeGroup() { if(db.open()) { QSqlQuery qry(db); bool success = qry.exec("SELECT * FROM attribute_group"); if (!success) { qDebug()< DataBase::getCheckStateFromManager(const QString& sProject) { QMap map; if(sProject == QString::fromWCharArray(L"新建")) { return map; } if(db.open()) { QSqlQuery qry(db); qry.prepare("SELECT group_name, check_state FROM project_manager WHERE tag = ?"); qry.bindValue(0,sProject); bool res = qry.exec(); QString str = qry.lastQuery(); if(!res) { qDebug()<