57 lines
2.1 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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