57 lines
2.1 KiB
C
Raw Normal View History

#pragma execution_character_set("utf-8")
#ifndef SqlCore_H
#define SqlCore_H
/*
\author: zym
\brief :
\version 1.0
\note
\CopyRight:zym
*/
#include <QObject>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QMutex>
#include <QMap>
#include <QSharedPointer>
//数据库操作类
//使用QMutex 对 连接 加锁,适用于多线程
//但建议经常同时操作同一数据库的线程 使用 不同的连接名,因为锁的互斥等待会增大处理时间
//(数据库中实际的连接名是"dbFile+connName",但若使用此类的封装则不用关心实际的连接名)
class SqlCore : public QObject
{
Q_OBJECT
public:
//以connName连接对数据库dbFile执行sql语句该sql语句无返回值函数返回执行成功/失败
//若该连接已存在则则获取,不存在则创建再获取
static bool execute(QString sql);
static QSharedPointer<QSqlQuery>select(QString sql, bool& ok);
//以connName连接对数据库dbFile执行sql语句该sql语句有返回值通过QSqlQuery::next()不断获取数据行
//若该连接已存在则则获取,不存在则创建再获取
static QSharedPointer<QSqlQuery>select(QString sql);
//删除db文件dbFile的connName连接和其对应的锁
static void destroyConn();
//删除db文件dbFile的所有连接和锁
static void destroyOneDBConn();
//删除所有db文件的所有连接和锁
static void destroyAllDBConn();
static QSqlDatabase getSqlDataBase();
static void init(QString sDriver, QString sUser, QString sPasswd, QString sDBFile);
static bool setKey(QString sDriver, QString sConnect, QString sUser, QString sPasswd, QString sdbFile);
static bool updateKey(QString NewsPasswd, QString oldPasswd);
private:
//获取对于dbFile文件的数据库连接connName
//有则返回,没有则创建再返回
//同步锁外层key是db文件名内层key是该db文件的数据库连接名
static QMap<QString, QMap<QString, QMutex*>> mutexMap;
static QString msDriverName;
static QString msUserName;
static QString msPasswd;
static QString msDBFile;
static QMutex mWriteMutex;
};
#endif // SqlCore_H