COMPASSi/trunk/code/inc/Util/include/DBUtil.h

261 lines
7.9 KiB
C
Raw Permalink Normal View History

2025-06-25 15:06:42 +08:00
#ifndef DBUTIL_H
#define DBUTIL_H
#include <QMap>
#include <QtSql>
#include <QStringList>
#include <QVariantMap>
#include <functional>
/**
*
* map map Bean
* UserDao.cpp.
*
* bean ( getter setter )
*
* sql SQL SELECT id, username, password FROM user
* SQL UPDATE user SET username=:username, password=:password WHERE id=:id
* map sql
* QVariantMap params;
* params["id"] = user.id;
* params["username"] = user.username;
* params["password"] = user.password;
*
* DaoTemplate::update(sql, params);
*
* :
* insert
* update:
*
* selectMap
* selectMaps
* selectBean
* selectBeans
* selectStrings
*/
#include "UtilityGlobal.h"
// #ifdef __cplusplus
// extern"C"{
// #endif
struct UTILITY_API QuerySQL
{
QString sql;
QVariantMap params;
};
class UTILITY_API DBUtil {
public:
/**
*
*
* @param sql
* @param params
* @return true false.
*/
static bool insert(const QString &db,const QString &sql, const QVariantMap &params = QVariantMap());
/**
* (update delete ).
*
* @param sql
* @param params
* @return true false.
*/
static bool update(const QString& db, const QString &sql, const QVariantMap &params = QVariantMap());
/**
* map: key value .
*
* @param sql
* @param params
* @return map.
*/
static QVariantMap selectMap(const QString db, const QString &sql, const QVariantMap params = QVariantMap());
/**
* mapKey Value .
* map list
*
* @param sql
* @param params
* @return map list.
*/
static QList<QVariantMap> selectMaps(const QString db, const QString sql, const QVariantMap params = QVariantMap());
/**
* .
*
* @param result
* @param sql
* @param params
* @return int
*/
static int selectInt(const QString& db, const QString &sql, const QVariantMap &params = QVariantMap());
/**
* , 便.
*
* @param result
* @param sql
* @param params
* @return
*/
static qint64 selectInt64(const QString& db, const QString &sql, const QVariantMap &params = QVariantMap());
/**
* .
* @param str
* @param sql
* @param params
* @return
*/
static QString selectString(const QString& db, const QString &sql, const QVariantMap &params = QVariantMap());
/**
* .
*
* @param strs
* @param sql
* @param params
* @return string list.
*/
static QStringList selectStrings(const QString& db, const QString &sql, const QVariantMap &params = QVariantMap());
/**
* .
*
* @param date
* @param sql
* @param params
* @return date
*/
static QDate selectDate(const QString& db, const QString &sql, const QVariantMap &params = QVariantMap());
/**
* .
*
* @param date
* @param sql
* @param params
* @return date time
*/
static QDateTime selectDateTime(const QString& db, const QString &sql, const QVariantMap &params = QVariantMap());
/**
* QVariant.
*
* @param str
* @param sql
* @param params
* @return variant
*/
static QVariant selectVariant(const QString& db, const QString &sql, const QVariantMap &params = QVariantMap());
/**
* bean.
*
* @param sql
* @param mapToBean - map .
* @return bean, T id -1便
*/
template <typename T>
static T selectBean(T mapToBean(const QVariantMap& rowMap), const QString& db, const QString& sql, const QVariantMap& params = QVariantMap()) {
// 把 map 都映射成一个 bean 对象
return mapToBean(selectMap(db, sql, params));
}
/**
* bean list.
*
* @param sql
* @param params
* @param mapToBean - map bean .
* @return bean list list.
*/
template<typename T>
static QList<T> selectBeans(T mapToBean(const QVariantMap& rowMap), const QString& db, const QString& sql, const QVariantMap& params = QVariantMap()) {
QList<T> beans;
// 每一个 map 都映射成一个 bean 对象
foreach (const QVariantMap &row, selectMaps(db, sql, params)) {
beans.append(mapToBean(row));
}
return beans;
}
/**
* 使select输出,db
*
* @param query_list sql语句列表
*/
static bool transationSql(const QString& db, const QList<QuerySQL>& query_list);
/*判断表格是否存在*/
static bool has_existed_table(const QString& db, const QString &tn);
static bool has_existed_table_db(const QSqlDatabase& db, const QString &tn);
/*删除表*/
static bool remove_table(const QString& db, const QString& tn);
static bool remove_table_db(const QSqlDatabase& db, const QString& tn);
/* 清空表数据 */
static bool clear_table_db(const QSqlDatabase& db, const QString& tn);
static void disConnection(const QString &dbName);
private:
/**
* 访SQL 使 Lambda
*
* @param sql
* @param params
* @param fn - SQL Lambda
*/
static void executeSql(const QString& db, const QString &sql, const QVariantMap &params, std::function<void(QSqlQuery *query)> fn);
/**
* query labels ().
*
* @param query
* @return string list.
*/
static QStringList getFieldNames(const QSqlQuery &query);
/**
* map key value query .
*
* @param query
* @param params
*/
static void bindValues(QSqlQuery *query, const QVariantMap &params);
/**
* query map list.
*
* @param query
* @return key map list.
*/
static QList<QVariantMap> queryToMaps(QSqlQuery *query);
/**
* config.json database.debug true SQL false.
* @param query
*/
static void debug(const QSqlQuery &query, const QVariantMap &params);
};
// #ifdef __cplusplus
// }
// #endif
#endif // DBUTIL_H