数据库
数据库交互
SQLHelper.h
#ifndef SQLHELPER_H
#define SQLHELPER_H
#include <QObject>
#include<QSqlDatabase>
#include<QSqlError>
#include<QSqlQuery>
class SQLHelper : public QObject
{
Q_OBJECT
public:
explicit SQLHelper(QObject *parent = 0);
// 获取Qt支持的驱动
QStringList showDriver();
//初始化
bool init(QString connName, QString dbName, QString ip, int port, QString userName, QString pwd, const QString dbType = "QSQLITE");
//打开
bool open();
//关闭
void close();
//执行sql语句
bool exec(QString sql);
//批量执行
bool execBatch();
//事务
bool transaction();
//提交
bool commit();
//回滚
bool rollback();
//获取Query对象
QSqlQuery& getSqlQuery();
//获取数据库对象
QSqlDatabase& getSqlDatabase();
//错误信息
QString errorMessage();
signals:
public slots:
private:
QSqlQuery sqlQuery; //todo 1,调度线程使用其查询,2,事务处理线程使用其进行数据存储,二者都用到
//QSqlQuery中的数据使用时要防止出现线程安全问题
QSqlDatabase sqlDataBase;
QString sqlErrorMessage;
QString sqlConnName;
QString sqlDbName;
QString sqlIP;
QString sqlUserName;
QString sqlPassword;
QString sqlDbType;
int sqlPort;
};
#endif // SQLHELPER_H
SQLHelper.cpp
#include "SQLHelper.h"
#include <QUuid>
#include <QVariant>
#include <QDebug>
#include <QTime>
#include <QFileInfo>
#include <QDir>
#include "LogHelper/LogHelper.h"
SQLHelper::SQLHelper(QObject *parent) : QObject(parent)
{
}
QStringList SQLHelper::showDriver()
{
QStringList list = sqlDataBase.drivers();
qInfo() << list;
return list;
}
bool SQLHelper::init(QString connName, QString dbName, QString ip, int port, QString userName, QString pwd, const QString dbType)
{
if (connName.isEmpty() ||
dbName.isEmpty() ||
ip.isEmpty() ||
userName.isEmpty() ||
pwd.isEmpty() ||
dbType.isEmpty() ||
port <= 0 || port > 65535) {
return false;
}
//初始化配置
sqlConnName = connName;
sqlDbName = dbName;
sqlIP=ip;
sqlUserName = userName;
sqlPassword=pwd;
sqlDbType=dbType;
sqlPort = port;
return true;
}
bool SQLHelper::open()
{
if (QSqlDatabase::contains(sqlConnName)) {
sqlDataBase = QSqlDatabase::database(sqlConnName);
}
else {
//!平台初始化读取配置
sqlDataBase = QSqlDatabase::addDatabase(sqlDbType, sqlConnName);
QString dirPath = QDir::fromNativeSeparators(sqlDbName);
// qInfo()<<"dirPath=="<< dirPath;
if(dirPath.contains("/")){
QString folder = dirPath.replace(dirPath.split("/")[dirPath.split("/").size()-1],"");
//qInfo()<< folder;
QFileInfo fileInfo(folder);
if(!fileInfo.exists()){
QDir tmpDir;
tmpDir.mkpath(folder);
}
}
sqlDataBase.setDatabaseName(sqlDbName);//使用哪个数据库
sqlDataBase.setHostName(sqlIP);//数据库服务器IP
sqlDataBase.setPort(sqlPort);//数据库端口号
sqlDataBase.setUserName(sqlUserName);//数据库用户名
sqlDataBase.setPassword(sqlPassword);//密码
}
if(!sqlDataBase.open()){
sqlErrorMessage = sqlDataBase.lastError().text();
qInfo()<<sqlDataBase.lastError().text().toLocal8Bit().constData();
return false;
}
//!连接成功后设置query
sqlQuery = QSqlQuery(sqlDataBase);
// qInfo()<<"open db success! dbName:"<<sqlDbName<<QTime::currentTime()<<"\n";
return true;
}
void SQLHelper::close()
{
sqlQuery.clear();
///
if(sqlDataBase.isOpen()){
sqlDataBase.close();
}
if(sqlDataBase.contains(sqlConnName)){
sqlDataBase = QSqlDatabase();
/// 解决UOS数据库连接问题
sqlDataBase.removeDatabase(sqlConnName);
}
}
bool SQLHelper::exec(QString sql)
{
if(!sqlDataBase.isOpen()){
open();
}
if(!sqlQuery.exec(sql)){
sqlErrorMessage = sqlQuery.lastError().text();
qInfo()<<sqlDataBase.lastError().text().toLocal8Bit().constData();
Log_ERROR("sql Error:%s ",sql.toUtf8().data());
return false;
}
return true;
}
bool SQLHelper::execBatch() {
if(!sqlDataBase.isOpen()){
open();
}
if(!sqlQuery.execBatch()){
sqlErrorMessage = sqlQuery.lastError().text();
qInfo()<<sqlDataBase.lastError().text().toLocal8Bit().constData();
return false;
}
return true;
}
bool SQLHelper::transaction()
{
if(!sqlDataBase.isOpen()){
open();
}
return sqlDataBase.transaction();
}
bool SQLHelper::commit()
{
if(!sqlDataBase.commit()){
sqlErrorMessage = sqlDataBase.lastError().text();
qInfo()<<sqlDataBase.lastError().text().toLocal8Bit().constData();
return false;
}
return true;
}
bool SQLHelper::rollback()
{
if(!sqlDataBase.rollback()){
sqlErrorMessage = sqlDataBase.lastError().text();
qInfo()<<sqlDataBase.lastError().text().toLocal8Bit().constData();
return false;
}
return true;
}
QSqlQuery &SQLHelper::getSqlQuery()
{
return sqlQuery;
}
QSqlDatabase &SQLHelper::getSqlDatabase()
{
return sqlDataBase;
}
QString SQLHelper::errorMessage()
{
return sqlErrorMessage;
}