You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

145 lines
3.3 KiB
C++

#include "modelmgrdb.h"
#include "gensql.h"
#include "WheelModel.h"
#include <QVariantMap>
#include <QSqlError>
ModelMgrDB::ModelMgrDB(const QString& dbName, const QString& dbType) //:DataBaseSql(dbName, dbType)
{
m_DBType = dbType;
if (dbType == "QSQLITE")
{
db = new QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE", dbName));
db->setDatabaseName(dbName);
}
else if (dbType == "QMYSQL")
{
db = new QSqlDatabase(QSqlDatabase::addDatabase("QMYSQL", dbName));
}
}
ModelMgrDB::~ModelMgrDB()
{
if (db->isOpen())
{
db->close();
}
delete db;
db = NULL;
}
bool ModelMgrDB::openDB()
{
return db->open();
}
void ModelMgrDB::closeDB()
{
db->close();
}
bool ModelMgrDB::InitDatabase()
{
if (!db->open())
{
return false;
}
QVariantMap vMap;
vMap.insert(_MD_MODEL, "VARCHAR(32)");//model 模型名称
vMap.insert(_MD_DIAMETER, "INT(100)");//直径
vMap.insert(_MD_HIGHT, "INT(100)");//高度
vMap.insert("picpath", "VARCHAR(32)");
vMap.insert(_MD_ROTATE, "INT(100)");
if (!CreatTable("modelTable", _MD_PRIMARY_KEY, vMap))
{
return false;
}
return true;
}
bool ModelMgrDB::CreatTable(QString m_tableName, QString m_primaty, QVariantMap m_map)
{
QString strSql = gensql::genCreateTabel(m_tableName, m_primaty, "INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL", m_map);
QSqlQuery sql = db->exec(strSql);
QSqlError err = sql.lastError();
int nType = err.type();
if (nType != QSqlError::NoError)
return false;
return true;
}
bool ModelMgrDB::addData(QVariantMap m_map)
{
return InsertOneData("modelTable", m_map);
}
bool ModelMgrDB::InsertOneData(QString m_tableName, QVariantMap m_map)
{
if (m_tableName.isEmpty() || m_map.empty()) {
return false;
}
QString strSql;
strSql = gensql::genInsertData(m_tableName, m_map);
qry = db->exec(strSql);
QSqlError bflags = qry.lastError();
int nType = bflags.type();
QString str = db->databaseName();
if (db->lastError().isValid())
{
return false;
}
return true;
}
bool ModelMgrDB::ReadOutData(QMap<QString, class IWheelModel*> &m_MapString)
{
QString select_sql = QString("select * from ") + "modelTable";
QSqlQuery sql = db->exec(select_sql);
QSqlError err = sql.lastError();
int t = err.type();
if (t != QSqlError::NoError)
{
return false;
}
m_MapString.clear();
while (sql.next())
{
WheelModel * pModel = new WheelModel;
pModel->m_strModelID = sql.value(_MD_MODEL).toString();
pModel->m_dDiameter = sql.value(_MD_DIAMETER).toDouble();
pModel->m_dHeight = sql.value(_MD_HIGHT).toDouble();
pModel->m_strPath = sql.value("picpath").toString();
pModel->m_nRotate = sql.value(_MD_ROTATE).toInt();
m_MapString.insert(pModel->m_strModelID, pModel);
}
return true;
}
bool ModelMgrDB::DeleteModelData(QString m_modelName)
{
QString m_map = gensql::genClass(_MD_MODEL, m_modelName);//!>生成where条件语句
QString strSql = gensql::genDeleteData("modelTable", m_map);
QString sqlstr = QString("delete");
db->exec(strSql);
if (db->lastError().isValid())
{
return false;
}
return true;
}
bool ModelMgrDB::UpdateModelData(QString m_modelName, QVariantMap m_map)
{
if (m_modelName.isEmpty() || m_map.empty()) {
return false;
}
QString m_str = gensql::genClass(_MD_MODEL, m_modelName);//!>生成where条件语句
QString strSql = gensql::genUpdate("modelTable", m_map, m_str);
db->exec(strSql);
if (db->lastError().isValid())
{
return false;
}
return true;
}