开发背景:
1.直接用QSqlDatabase我觉得太麻烦了;
2.对于某些数据库,多个线程同时使用一个QSqlDatabase的时候会崩溃;
3.这段时间没什么干货放出来觉得浑身不舒服,就想写一个。
于是,我就封装了一下
只要简单的实例化,然后通过query()就可以拿到QSqlQuery的实例化对象。
还自带计时,一段时间不用可自动关闭,既保证效率也不占用无用资源。
注:需要C++11的支持
不多说,上代码:
JasonQt_Database.h
#ifndef __JasonQt_Database_h__
#define __JasonQt_Database_h__
// C++ lib import
#include <functional>
// Qt lib import
#include <QtCore>
#include <QtSql>
#define PropertyDeclare(Type, Name, setName, ...) \
private: \
Type m_ ## Name __VA_ARGS__; \
public: \
inline const Type &Name(void) const { return m_ ## Name; } \
inline void setName(const Type &Name) { m_ ## Name = Name; } \
private:
namespace JasonQt_Database
{
enum DatabaseModeEnum{ DatabaseNameMode, DatabaseHostMode };
enum QueryMode { QueryAutoMode, QueryMultiMode, QuerySingleMode };
class DatabaseSettings
{
private:
PropertyDeclare(DatabaseModeEnum, databaseMode, setDatabaseMode)
PropertyDeclare(QString, databaseType, setDatabaseType)
PropertyDeclare(QString, connectionName, setConnectionName)
// File mode
PropertyDeclare(QString, nameModeName, setNameModeName)
// Host mode
PropertyDeclare(QString, hostModeHostName, setHostModeHostName)
PropertyDeclare(QString, hostModeDatabaseName, setHostModeDatabaseName)
PropertyDeclare(QString, hostModeUserName, setHostModeUserName)
PropertyDeclare(QString, hostModePassword, setHostModePassword)
private:
DatabaseSettings(const DatabaseModeEnum &databastMode, const QString &databaseType, const QString &connectionName);
public:
DatabaseSettings(const QString &databaseType, const QString &connectionName, const QString &nameModeName);
DatabaseSettings(const QString &databaseType, const QString &connectionName, const QString &hostModeHostName, const QString &hostModeDatabaseName, const QString &hostModeUserName, const QString &hostModePassword);
};
class ConnectSettings
{
private:
PropertyDeclare(int, maxOpenTime, setMaxOpenTime)
PropertyDeclare(QueryMode, queryMode, setQueryMode)
PropertyDeclare(int, minWaitTime, setMinWaitTime)
public:
ConnectSettings(const int &maxOpenTime = 60 * 1000, const QueryMode &queryMode = QueryAutoMode, const int &minWaitTime = -1);
};
class Query
{
private:
QSqlQuery *m_query;
QMutex *m_mutex = NULL;
public:
Query(QSqlDatabase &dataBase, QMutex *mutex = NULL);
Query(Query &&other);
~Query(void);
inline QSqlQuery *operator->(void) { retu

最低0.47元/天 解锁文章
234





