New method for sql data query

This commit is contained in:
Krad
2021-12-08 15:10:28 +08:00
parent dbcd866aa9
commit f00501f680
2 changed files with 44 additions and 5 deletions

View File

@@ -6,10 +6,11 @@
#include <QSqlQuery> #include <QSqlQuery>
#include <QSqlDatabase> #include <QSqlDatabase>
#include <QSqlQuery> #include <QSqlQuery>
#include <QSqlError>
#include <QSqlRecord> #include <QSqlRecord>
#include <qdebug.h> #include <qdebug.h>
QSqlDatabase* SQLHelper::defaultDatabase= nullptr; QSqlDatabase* SQLHelper::defaultDatabase= nullptr;
QHash<QString,CenterAlignSqlTableModel*>* SQLHelper::cache= new QHash<QString,CenterAlignSqlTableModel*>; QHash<QString,QSqlQueryModel*>* SQLHelper::cache= new QHash<QString,QSqlQueryModel*>;
bool SQLHelper::Open() { bool SQLHelper::Open() {
if (defaultDatabase) return true; if (defaultDatabase) return true;
defaultDatabase= new QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE", "USCTDB")); defaultDatabase= new QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE", "USCTDB"));
@@ -49,11 +50,11 @@ void prepareSQL(QSqlQuery& query,QMap<QString,QVariant>* params)
QSqlTableModel* SQLHelper::getTable(const QString &tableName) { 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); CenterAlignSqlTableModel *model = new CenterAlignSqlTableModel(nullptr,*defaultDatabase);
model->setTable(tableName); model->setTable(tableName);
(*cache)[tableName] = model; (*cache)[tableName] = model;
return (*cache)[tableName]; return (QSqlTableModel*)(*cache)[tableName];
} }
int SQLHelper::QueryCount(QString sql, QMap<QString,QVariant>* params) { int SQLHelper::QueryCount(QString sql, QMap<QString,QVariant>* params) {
@@ -93,3 +94,38 @@ void SQLHelper::QueryFirst(QString sql, QMap<QString,QVariant>& result, QMap<QSt
} }
} }
} }
QSqlQueryModel *SQLHelper::QueryModel(QString queryName, QString sql, QMap<QString, QVariant> *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<QString, QVariant> &result, QMap<QString, QVariant> *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);
}
}
}

View File

@@ -7,7 +7,7 @@
class QSqlDatabase; class QSqlDatabase;
#include "CenterAlignSqlTableModel.h" #include "CenterAlignSqlTableModel.h"
#include <QSqlQueryModel>
#include <QString> #include <QString>
#include <QHash> #include <QHash>
@@ -19,10 +19,13 @@ public:
static void QueryFirst(QString sql, QMap<QString,QVariant>& result, QMap<QString,QVariant>* params = nullptr); static void QueryFirst(QString sql, QMap<QString,QVariant>& result, QMap<QString,QVariant>* params = nullptr);
static int QueryCount(QString sql, QMap<QString,QVariant>* params = nullptr); static int QueryCount(QString sql, QMap<QString,QVariant>* params = nullptr);
static int ExecuteNoQuery(QString sql, QMap<QString,QVariant>* params = nullptr); static int ExecuteNoQuery(QString sql, QMap<QString,QVariant>* params = nullptr);
static void QueryMap(QString sql, QMap<QString,QVariant>& result, QMap<QString,QVariant>* params = nullptr);
static QSqlQueryModel* QueryModel(QString queryName);
static QSqlQueryModel* QueryModel(QString queryName, QString sql, QMap<QString,QVariant>* params = nullptr);
static QSqlTableModel* getTable(const QString & tableName); static QSqlTableModel* getTable(const QString & tableName);
private: private:
static QSqlDatabase* defaultDatabase; static QSqlDatabase* defaultDatabase;
static QHash<QString,CenterAlignSqlTableModel*>* cache; static QHash<QString,QSqlQueryModel*>* cache;
}; };