Qt实现MySQL数据库备份小工具

//读取配置类
#ifndef CONFIG_H
#define CONFIG_H
#include <QObject>
#include <QFile>
#include <QDebug>
#include <QSettings>
class Config
{
public:
    Config();
    ~Config();
public:
    bool isReady()const {return configHasReady;}
    QSettings* getSet()const{return sets;}
signals:
public slots:
private:
    QSettings* sets;    //存所有的配置
    void init();//初始化
public:
    volatile bool configHasReady=false;//配置是否就绪
private:
};
#endif // CONFIG_H
#include "config.h"
#include <QDir>
Config::Config()
{
    (void)init();
}
Config::~Config()
{
    delete sets;
    sets = nullptr;
}
void Config::init()
{
    QString iniStr=QDir::currentPath()+"/cfg.ini";
    //配置文件初始化
    sets = new QSettings(iniStr,QSettings::IniFormat);
    if(0 != sets->allKeys().size())
    {
        configHasReady = true;
    }
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "config.h"
#include <QProcess>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void on_pushButton_clicked();
    void on_pushButton_2_clicked();
    void on_pushButton_4_clicked();
    QString getRandomString(int nLen);
private:
    Ui::MainWindow *ui;
    void init();
    Config cfg;
    QString dbname;
    QString dbip;
    QString dbusername ;
    QString dbpassword ;
    QProcess *m_pProcess;
private slots:
    void getTableName();
    void on_pushButton_3_clicked();
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mysqltool.h"
#include <QSqlQuery>
#include <QFileDialog>
#include <QCompleter>
#include <QStringList>
#include <QDialog>
#include <QCheckBox>
#include <QSqlError>
#include <QProcess>
#include <QMessageBox>
#include <QStringList>
#include <QVBoxLayout>
#include <QUuid>
#include <QDateTime>
#include <QScrollArea>
#include <QDateTime>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    (void)init();
//    QDateTime current_date_time =QDateTime::currentDateTime();
//    QString current_date =current_date_time.toString("yyyy.MM.dd hh:mm:ss.zzz ddd");
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::init()
{
    int dbCount = cfg.getSet()->value("DB_COUNT").toInt();
    // qDebug()<<dbCount;
    for(int i=0;i<dbCount;i++)
    {
        QString test = QString("DB_NAME_%1").arg(i+1);
        QString ip = QString ("DB_IP_%1").arg(i+1);
        // qDebug()<<test;
        ui->comboBox->insertItem(ui->comboBox->count(),cfg.getSet()->value(test).toString());
        ui->comboBox_3->insertItem(ui->comboBox_3->count(),cfg.getSet()->value(ip).toString());
        ui->comboBox_2->insertItem(ui->comboBox_2->count(),cfg.getSet()->value(test).toString());
    }
}
void MainWindow::getTableName()
{
    int dbCount = cfg.getSet()->value("DB_COUNT").toInt();
    for(int i=0;i<dbCount;i++)
    {
        dbname =cfg.getSet()->value(QString("DB_NAME_%1").arg(i+1)).toString();
        qDebug() <<dbname;
        dbip = cfg.getSet()->value(QString("DB_IP_%1").arg(i+1)).toString();
        dbusername = cfg.getSet()->value(QString("DB_USERNAME_%1").arg(i+1)).toString();
        dbpassword = cfg.getSet()->value(QString("DB_PASSWORD_%1").arg(i+1)).toString();
        if(ui->comboBox->currentText()  == dbname)
        {
            QSqlDatabase dataBase=QSqlDatabase::addDatabase("QMYSQL");
            dataBase.setHostName(dbip);
            dataBase.setUserName(dbusername);
            dataBase.setPassword(dbpassword);
            dataBase.setDatabaseName(dbname);
            dataBase.open();
            qDebug() <<dbname;
            bool ok=dataBase.open();
            if(ok)
            {
                qDebug()<<"open database success";
            }
            else
            {
                //qDebug()<<"error open database because"<<this->dataBase.lastError().text();
            }
        }
    }
    QCheckBox *button = (QCheckBox * )(sender()); //关键一步是利用sender()
    qDebug()<<"button text:"<<button->text();
    QString argument = QString("mysqldump -h%1 -u%2 -p%3 %4 %5").arg(dbip,dbusername,dbpassword,dbname,button->text());
    qDebug() <<argument;
    QString Path = QString("d://%1.Sql").arg(button->text());
    QProcess *poc=new QProcess;
    poc->setStandardOutputFile(Path);
    poc->start(argument);
    QMessageBox::information(0,"","备份完成!备份文件存放在D://");
}
QString MainWindow::getRandomString(int nLen = 5)
{
    nLen = rand() % 10;
    nLen = nLen < 5 ? 5 : nLen;	//随机数取余10可能存在为0的情况,为0时取长度为5
    QString strUUID = QUuid::createUuid().toString().remove("{").remove("}").remove("-");
    return strUUID.right(nLen);
}
void MainWindow::on_pushButton_clicked()
{
    int dbCount = cfg.getSet()->value("DB_COUNT").toInt();
    for(int i=1;i<=dbCount;i++)
    {
        dbname =cfg.getSet()->value(QString("DB_NAME_%1").arg(i)).toString();
        qDebug() <<dbname;
        dbip = cfg.getSet()->value(QString("DB_IP_%1").arg(i)).toString();
        dbusername = cfg.getSet()->value(QString("DB_USERNAME_%1").arg(i)).toString();
        dbpassword = cfg.getSet()->value(QString("DB_PASSWORD_%1").arg(i)).toString();
        if(ui->comboBox->currentText() == dbname)
        {
            QSqlDatabase dataBase=QSqlDatabase::addDatabase("QMYSQL");
            dataBase.setHostName(dbip);
            dataBase.setUserName(dbusername);
            dataBase.setPassword(dbpassword);
            dataBase.setDatabaseName(dbname);
            dataBase.open();
            qDebug() <<dbip;
            bool ok=dataBase.open();
            if(ok)
            {
                qDebug()<<"open database success";
            }
            else
            {
                //qDebug()<<"error open database because"<<this->dataBase.lastError().text();
            }
            break;
        }
    }
    ui->plainTextEdit->appendPlainText(QString("当前选取的数据库为:%1").arg(ui->comboBox->currentText()));
    QString argument = QString("mysqldump.exe  -h%1 -u%2 -p%3 --databases %4 ")
            .arg(dbip)
            .arg(dbusername)
            .arg(dbpassword)
            .arg(dbname);
    qDebug() <<argument;
    qDebug()<<dbname;
    QString Path =  QString("d://%1.Sql").arg(dbname);
    QProcess *poc=new QProcess;
    poc->setStandardOutputFile(Path);
    poc->start(argument);
    ui->plainTextEdit->appendPlainText("备份成功..");
}
void MainWindow::on_pushButton_2_clicked()
{
  
}
void MainWindow::on_pushButton_4_clicked()
{
    int dbCount = cfg.getSet()->value("DB_COUNT").toInt();
    for(int i=1;i<=dbCount;i++)
    {
        dbname =cfg.getSet()->value(QString("DB_NAME_%1").arg(i)).toString();
        dbip = cfg.getSet()->value(QString("DB_IP_%1").arg(i)).toString();
        dbusername = cfg.getSet()->value(QString("DB_USERNAME_%1").arg(i)).toString();
        dbpassword = cfg.getSet()->value(QString("DB_PASSWORD_%1").arg(i)).toString();
        if(ui->comboBox_3->currentText()  == dbip)
        {
            QSqlDatabase dataBase=QSqlDatabase::addDatabase("QMYSQL");
            dataBase.setHostName(dbip);
            dataBase.setUserName(dbusername);
            dataBase.setPassword(dbpassword);
            dataBase.setDatabaseName(dbname);
            dataBase.open();
            bool ok=dataBase.open();
            if(ok)
            {
                qDebug()<<"open database success";
            }
            else
            {
                //qDebug()<<"error open database because"<<this->dataBase.lastError().text();
            }
            QString sSqlFile = QFileDialog::getOpenFileName( NULL, "数据库恢复 - 请选择数据库恢复文件", qApp->applicationDirPath(), "*.sql" );
            QFileInfo fi;
            fi = QFileInfo(sSqlFile);
            QString name = fi.fileName();
            QString Cmd = QString("mysql.exe -u%1 -p%2 ").arg(dbusername,dbpassword);
            QString Path = QString("d://%1").arg(name);
            QProcess *poc=new QProcess;
            poc->setStandardInputFile(Path);
            poc->start(Cmd);
            QMessageBox::information(0,"","还原完成!");
        }
    }
}
void MainWindow::on_pushButton_3_clicked()
{
    int dbCount = cfg.getSet()->value("DB_COUNT").toInt();
    for(int i=1;i<=dbCount;i++)
    {
        dbname =cfg.getSet()->value(QString("DB_NAME_%1").arg(i)).toString();
        dbip = cfg.getSet()->value(QString("DB_IP_%1").arg(i)).toString();
        dbusername = cfg.getSet()->value(QString("DB_USERNAME_%1").arg(i)).toString();
        dbpassword = cfg.getSet()->value(QString("DB_PASSWORD_%1").arg(i)).toString();
        if(ui->comboBox_2->currentText()  == dbname)
        {
            QSqlDatabase dataBase=QSqlDatabase::addDatabase("QMYSQL");
            dataBase.setHostName(dbip);
            dataBase.setUserName(dbusername);
            dataBase.setPassword(dbpassword);
            dataBase.setDatabaseName(dbname);
            dataBase.open();
            bool ok=dataBase.open();
            if(ok)
            {
                qDebug()<<"open database success";
            }
            else
            {
                //qDebug()<<"error open database because"<<this->dataBase.lastError().text();
            }
            QString Cmd = QString("mysql.exe -u%1 -p%2 ").arg(dbusername,dbpassword);
            QString Path = QString("d://%1.Sql").arg(ui->comboBox_2->currentText());
            QProcess *poc=new QProcess;
            poc->setStandardInputFile(Path);
            poc->start(Cmd);
            QMessageBox::information(0,"","还原完成!");
        }
    }
}

 

  进群领取qt开发学习资料以及技术交流  在下方↓↓↓↓↓↓↓↓