Files
GUI/src/db/SQLHelper.cpp

138 lines
3.9 KiB
C++
Raw Normal View History

//
// Created by Krad on 2021/10/11.
//
#include "SQLHelper.h"
2021-10-14 17:04:59 +08:00
#include <QSqlQuery>
#include <QSqlDatabase>
#include <QSqlQuery>
2021-12-08 15:10:28 +08:00
#include <QSqlError>
2021-10-14 17:04:59 +08:00
#include <QSqlRecord>
#include <qdebug.h>
QSqlDatabase* SQLHelper::defaultDatabase= nullptr;
2022-06-13 11:21:44 +08:00
static QHash<QString,QSqlQueryModel*> cache;
bool SQLHelper::Open() {
if (defaultDatabase) return true;
2023-08-09 16:04:47 +08:00
// defaultDatabase= new QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE", "USCTDB"));
// defaultDatabase->setDatabaseName("USCTDB.data");
defaultDatabase = new QSqlDatabase(QSqlDatabase::addDatabase("QMYSQL"));
defaultDatabase->setHostName("192.168.1.15"); // 数据库服务器地址
defaultDatabase->setPort(3306); // 数据库名称
defaultDatabase->setDatabaseName("USCT"); // 数据库名称
defaultDatabase->setUserName("rc"); // 数据库用户名
defaultDatabase->setPassword("123$%^"); // 数据库密码
return defaultDatabase->open();
}
bool SQLHelper::Open(QSqlDatabase *base) {
if(base && base != defaultDatabase){
defaultDatabase = base;
}
return defaultDatabase->open();
}
void SQLHelper::Close() {
2022-06-13 11:21:44 +08:00
for(auto item : cache.values())
{
delete item;
}
2022-06-13 11:21:44 +08:00
cache.clear();
if(defaultDatabase->isValid() && defaultDatabase->isOpen())
{
defaultDatabase->close();
delete defaultDatabase;
defaultDatabase = nullptr;
}
}
2022-06-13 11:21:44 +08:00
void prepareSQL(QSqlQuery& query,const QMap<QString,QVariant>& params)
2021-11-12 14:32:22 +08:00
{
2022-06-13 11:21:44 +08:00
if (params.empty()) return;
for (const auto & key : params.keys())
2021-11-12 14:32:22 +08:00
{
2022-06-13 11:21:44 +08:00
query.bindValue(key,params.value(key));
2021-11-12 14:32:22 +08:00
}
}
2021-10-14 17:04:59 +08:00
QSqlTableModel* SQLHelper::getTable(const QString &tableName) {
2022-06-13 11:21:44 +08:00
if (cache.contains(tableName)) return (QSqlTableModel*)cache[tableName];
CenterAlignSqlTableModel *model = new CenterAlignSqlTableModel(nullptr,*defaultDatabase);
model->setTable(tableName);
2022-06-13 11:21:44 +08:00
cache[tableName] = model;
return (QSqlTableModel*)(cache)[tableName];
}
2021-10-14 17:04:59 +08:00
2022-06-13 11:21:44 +08:00
int SQLHelper::QueryCount(const QString& sql, const QMap<QString,QVariant>& params) {
2021-10-14 17:04:59 +08:00
QSqlQuery query(*defaultDatabase);
2021-11-12 14:32:22 +08:00
prepareSQL(query, params);
2021-10-14 17:04:59 +08:00
if (query.exec(sql))
{
query.last();
return query.at()+1;
}
return 0;
}
2022-06-13 11:21:44 +08:00
int SQLHelper::ExecuteNoQuery(const QString& sql, const QMap<QString,QVariant>& params) {
QSqlQuery query(*defaultDatabase);
2021-11-12 14:32:22 +08:00
query.prepare(sql);
prepareSQL(query, params);
if (query.exec())
{
return query.numRowsAffected();
}
return 0;
}
2022-06-13 11:21:44 +08:00
void SQLHelper::QueryFirst(const QString &sql, QMap<QString,QVariant>& result, const QMap<QString,QVariant>& params) {
QSqlQuery query(*defaultDatabase);
2021-11-12 14:32:22 +08:00
query.prepare(sql);
prepareSQL(query, params);
if (query.exec())
{
if(query.next())
{
for(int i=0; i<query.record().count(); i++)
{
result[query.record().fieldName(i)]=query.record().value(i);
}
}
}
}
2021-12-08 15:10:28 +08:00
2022-06-13 11:21:44 +08:00
QSqlQueryModel *SQLHelper::QueryModel(const QString& queryName, const QString& sql, const QMap<QString, QVariant> &params) {
if (cache.contains(queryName)) return cache[queryName];
2021-12-08 15:10:28 +08:00
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;
}
2022-06-13 11:21:44 +08:00
cache[queryName] = model;
2021-12-08 15:10:28 +08:00
return model;
}
2022-06-13 11:21:44 +08:00
QSqlQueryModel *SQLHelper::QueryModel(const QString& queryName) {
if (cache.contains(queryName)) return cache[queryName];
2021-12-08 15:10:28 +08:00
return nullptr;
}
2022-06-13 11:21:44 +08:00
void SQLHelper::QueryMap(const QString& sql, QMap<QString, QVariant> &result, const QMap<QString, QVariant> &params) {
2021-12-08 15:10:28 +08:00
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);
}
}
}