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开发学习资料以及技术交流 在下方↓↓↓↓↓↓↓↓