58 lines
2.1 KiB
C
58 lines
2.1 KiB
C
|
#pragma execution_character_set("utf-8")
|
|||
|
#ifndef CSqlCore_H
|
|||
|
#define CSqlCore_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",但若使用此类的封装则不用关心实际的连接名)
|
|||
|
namespace UiFramework
|
|||
|
{
|
|||
|
class CSqlCore : 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 // CSqlCore_H
|