From f00501f680afd2659d77090afe13daec80d2d91d Mon Sep 17 00:00:00 2001 From: Krad Date: Wed, 8 Dec 2021 15:10:28 +0800 Subject: [PATCH] New method for sql data query --- src/db/SQLHelper.cpp | 42 +++++++++++++++++++++++++++++++++++++++--- src/db/SQLHelper.h | 7 +++++-- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/db/SQLHelper.cpp b/src/db/SQLHelper.cpp index fa26fa7..944e301 100644 --- a/src/db/SQLHelper.cpp +++ b/src/db/SQLHelper.cpp @@ -6,10 +6,11 @@ #include #include #include +#include #include #include QSqlDatabase* SQLHelper::defaultDatabase= nullptr; -QHash* SQLHelper::cache= new QHash; +QHash* SQLHelper::cache= new QHash; bool SQLHelper::Open() { if (defaultDatabase) return true; defaultDatabase= new QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE", "USCTDB")); @@ -49,11 +50,11 @@ void prepareSQL(QSqlQuery& query,QMap* params) QSqlTableModel* SQLHelper::getTable(const QString &tableName) { - if (cache->contains(tableName)) return (*cache)[tableName]; + if (cache->contains(tableName)) return (QSqlTableModel*)(*cache)[tableName]; CenterAlignSqlTableModel *model = new CenterAlignSqlTableModel(nullptr,*defaultDatabase); model->setTable(tableName); (*cache)[tableName] = model; - return (*cache)[tableName]; + return (QSqlTableModel*)(*cache)[tableName]; } int SQLHelper::QueryCount(QString sql, QMap* params) { @@ -93,3 +94,38 @@ void SQLHelper::QueryFirst(QString sql, QMap& result, QMap *params) { + if (cache->contains(queryName)) return (*cache)[queryName]; + QSqlQueryModel* model = new QSqlQueryModel; + + QSqlQuery query(*defaultDatabase); + query.prepare(sql); + prepareSQL(query, params); + model->setQuery(query); + if (model->lastError().isValid()){ + qDebug() << model->lastError(); + delete model; + return nullptr; + } + (*cache)[queryName] = model; + return model; +} + +QSqlQueryModel *SQLHelper::QueryModel(QString queryName) { + if (cache->contains(queryName)) return (*cache)[queryName]; + return nullptr; +} + +void SQLHelper::QueryMap(QString sql, QMap &result, QMap *params) { + QSqlQuery query(*defaultDatabase); + query.prepare(sql); + prepareSQL(query, params); + if (query.exec()) + { + while(query.next()) + { + result[query.record().value(0).toString()]=query.record().value(1); + } + } +} diff --git a/src/db/SQLHelper.h b/src/db/SQLHelper.h index c61dbb5..629a117 100644 --- a/src/db/SQLHelper.h +++ b/src/db/SQLHelper.h @@ -7,7 +7,7 @@ class QSqlDatabase; #include "CenterAlignSqlTableModel.h" - +#include #include #include @@ -19,10 +19,13 @@ public: static void QueryFirst(QString sql, QMap& result, QMap* params = nullptr); static int QueryCount(QString sql, QMap* params = nullptr); static int ExecuteNoQuery(QString sql, QMap* params = nullptr); + static void QueryMap(QString sql, QMap& result, QMap* params = nullptr); + static QSqlQueryModel* QueryModel(QString queryName); + static QSqlQueryModel* QueryModel(QString queryName, QString sql, QMap* params = nullptr); static QSqlTableModel* getTable(const QString & tableName); private: static QSqlDatabase* defaultDatabase; - static QHash* cache; + static QHash* cache; };