148 lines
3.8 KiB
C++
148 lines
3.8 KiB
C++
#include "SqlCore.h"
|
|
#include <QThread>
|
|
#include <QDebug>
|
|
#include <QSqlError>
|
|
#include <QFile>
|
|
|
|
|
|
QMap<QString, QMap<QString, QMutex*>> SqlCore::mutexMap;
|
|
|
|
QString SqlCore::msDriverName;
|
|
QString SqlCore::msPasswd;
|
|
QString SqlCore::msUserName;
|
|
QString SqlCore::msDBFile;
|
|
QMutex SqlCore::mWriteMutex;
|
|
void SqlCore::init(QString sDriver, QString sUser, QString sPasswd, QString sDBFile)
|
|
{
|
|
QByteArray base64User(sUser.toUtf8());
|
|
QByteArray base64Passwd(sPasswd.toUtf8());
|
|
msDriverName = sDriver;
|
|
msUserName = base64User.toBase64();
|
|
msPasswd = base64Passwd.toBase64();
|
|
msDBFile = sDBFile;
|
|
}
|
|
|
|
bool SqlCore::setKey(QString sDriver,QString sConnect, QString sUser, QString sPasswd, QString sdbFile)
|
|
{
|
|
bool ok = false;
|
|
QSqlDatabase dataBase = QSqlDatabase::addDatabase(sDriver, sConnect);
|
|
if (QFile::exists(sdbFile))
|
|
{
|
|
|
|
QByteArray base64User(sUser.toUtf8());
|
|
QByteArray base64Passwd(sPasswd.toUtf8());
|
|
dataBase.setUserName(base64User.toBase64());
|
|
dataBase.setDatabaseName(sdbFile);//
|
|
dataBase.setPassword(base64Passwd.toBase64());
|
|
if (sPasswd.isEmpty())
|
|
{
|
|
dataBase.setConnectOptions("QSQLITE_REMOVE_KEY");
|
|
//logInfo() << QString::fromLocal8Bit("½âÃÜ") << endl;
|
|
}
|
|
else
|
|
{
|
|
dataBase.setConnectOptions("QSQLITE_CREATE_KEY");
|
|
//logInfo() << QString::fromLocal8Bit("¼ÓÃÜ") << endl;
|
|
}
|
|
if (!dataBase.open())
|
|
{
|
|
//logError() << QString::fromLocal8Bit("ÃÜÂë´íÎó") << endl;
|
|
ok = false;
|
|
}
|
|
else
|
|
{
|
|
ok = true;
|
|
}
|
|
}
|
|
dataBase.close();
|
|
return ok;
|
|
}
|
|
|
|
bool SqlCore::updateKey(QString NewsPasswd, QString oldPasswd)
|
|
{
|
|
bool ok = false;
|
|
getSqlDataBase().setPassword(oldPasswd);
|
|
getSqlDataBase().setConnectOptions("QSQLITE_UPDATE_KEY=" + NewsPasswd);
|
|
ok = getSqlDataBase().open();
|
|
if (!ok)
|
|
{
|
|
//logError() << "updatePasswd: " << getSqlDataBase().lastError().driverText();
|
|
ok = false;
|
|
}
|
|
return ok;
|
|
}
|
|
|
|
bool SqlCore::execute(QString sql )
|
|
{
|
|
QMutexLocker lockTemp(&mWriteMutex);
|
|
QString connName = QString("%1(%2)").arg(msDBFile).arg(QString::number(qint64(QThread::currentThread()), 16));//ÎļþÃû + Ïß³Ì
|
|
//qDebug() << "execute:" << connName << endl;
|
|
QSqlDatabase t = getSqlDataBase( );
|
|
mutexMap[msDBFile][connName]->lock();
|
|
if (!t.isOpen())
|
|
t.open(msUserName,msPasswd);
|
|
QSqlQuery sqlQuery(t);
|
|
bool flag = sqlQuery.exec(sql);
|
|
if (!flag)
|
|
{
|
|
qDebug() << connName << sqlQuery.lastError().text() << endl;
|
|
}
|
|
mutexMap[msDBFile][connName]->unlock();
|
|
return flag;
|
|
}
|
|
|
|
|
|
|
|
|
|
QSharedPointer<QSqlQuery> SqlCore::select(QString sql)
|
|
{
|
|
QSharedPointer<QSqlQuery> sqlQuery = QSharedPointer<QSqlQuery>(new QSqlQuery);
|
|
return sqlQuery;
|
|
}
|
|
|
|
QSharedPointer<QSqlQuery> SqlCore::select(QString sql, bool& ok)
|
|
{
|
|
//QMutexLocker lockTemp(&mWriteMutex);
|
|
QString connName = QString("%1(%2)").arg(msDBFile).arg(QString::number(qint64(QThread::currentThread()), 16));//ÎļþÃû + Ïß³Ì
|
|
//qDebug() << "select:" << connName << endl;
|
|
QSqlDatabase t = getSqlDataBase();
|
|
QSharedPointer<QSqlQuery> sqlQuery = QSharedPointer<QSqlQuery>(new QSqlQuery(t));
|
|
ok = sqlQuery->exec(sql);
|
|
if (!ok)
|
|
{
|
|
//logError() << "CSqlCore::select() sql = " << sql << sqlQuery->lastError().text() << " failed!" << endl;
|
|
}
|
|
return sqlQuery;
|
|
}
|
|
|
|
void SqlCore::destroyConn()
|
|
{
|
|
|
|
}
|
|
|
|
void SqlCore::destroyOneDBConn()
|
|
{
|
|
|
|
}
|
|
|
|
void SqlCore::destroyAllDBConn()
|
|
{
|
|
|
|
destroyOneDBConn();
|
|
|
|
}
|
|
|
|
QSqlDatabase SqlCore::getSqlDataBase()
|
|
{
|
|
QString connName = QString("%1(%2)").arg(msDBFile).arg(QString::number(qint64(QThread::currentThread()), 16));//ÎļþÃû + Ïß³Ì
|
|
if (!QSqlDatabase::contains(connName))
|
|
{
|
|
QSqlDatabase database = QSqlDatabase::addDatabase(msDriverName, connName);
|
|
database.setDatabaseName(msDBFile);
|
|
database.setUserName(msUserName);
|
|
database.setPassword(msPasswd);
|
|
|
|
}
|
|
return QSqlDatabase::database( connName);
|
|
}
|