SQL

database.h

#ifndef DATABASE_H
#define DATABASE_H

#include <QObject>
#include <QSqlDatabase>
#include <QMutex>
#include <QSqlError>

#include "databasestruct.h"


class DataBase : public QObject
{
    Q_OBJECT
private:
    explicit DataBase(QObject *parent = 0);
    ~DataBase();
    DataBase(const DataBase &dataBase);
    DataBase operator=(const DataBase &dataBase);

public:
    // 是否已连接上数据库
    bool isOpen();

    // 数据库错误信息
    QSqlError lastError() const;

public:
    static DataBase* getInstance();

private:
    static DataBase        *_instance;
    static QSqlDatabase     _database;
    static QMutex           _mutex;

signals:

public slots:
    // 设置数据库相关参数
    void setDatabaseInfo(const QString &databaseType, const QString &databaseName, const QString &username, const QString &password);

    // 设置主机参数
    void setHostInfo(const QString &hostName, int port);

    // 打开连接数据库
    bool open();

    // 关闭数据库连接
    void close();

};

#endif // DATABASE_H

database.cpp

#include "database.h"

#include <QDebug>
#include <QSqlQuery>
#include <QDateTime>

DataBase       *DataBase::_instance = NULL;
QSqlDatabase    DataBase::_database;
QMutex          DataBase::_mutex;

DataBase::DataBase(QObject *parent) : QObject(parent)
{

}

DataBase::~DataBase()
{
    close();
}

//DataBase::DataBase(const DataBase &dataBase)//indifferent
//{

//}

//DataBase DataBase::operator=(const DataBase &dataBase)//indifferent
//{
//    return *this;
//}



bool DataBase::isOpen()
{
    return _database.isOpen();
}

QSqlError DataBase::lastError() const
{
    return _database.lastError();
}

DataBase *DataBase::getInstance()
{
    _mutex.lock();

    if( NULL == _instance )
    {
        _instance = new DataBase;
    }

    _mutex.unlock();

    return _instance;
}


void DataBase::setDatabaseInfo(const QString &databaseType, const QString &databaseName, const QString &username, const QString &password)
{
    _mutex.lock();

    _database = QSqlDatabase::addDatabase( databaseType );
    _database.setDatabaseName( databaseName );
    _database.setUserName( username );
    _database.setPassword( password );

    _mutex.unlock();

}

void DataBase::setHostInfo(const QString &hostName, int port)
{
    _mutex.lock();

    _database.setHostName( hostName );
    _database.setPort( port );

    _mutex.unlock();

}


bool DataBase::open()
{
    _mutex.lock();

    if( !_database.open() )
    {
        qDebug() << _database.lastError();

        qDebug() << _database.lastError().text();

        _mutex.unlock();

        return false;
    }

    _mutex.unlock();

    return true;
}

void DataBase::close()
{
    _mutex.lock();

    _database.close();

    _mutex.unlock();
}

确保程序正常运行需要libeay32.dll、libintl.dll、libpq.dll、ssleay32.dll。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值