57 lines
2.1 KiB
C++
57 lines
2.1 KiB
C++
#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
|