

数据库备份与恢复:
数据库迁移与转换:
开发与测试场景:
性能优化和分析:
支持跨平台的数据库迁移。如果开发环境和生产环境使用不同的数据库(如 SQLite 用于开发,MySQL 用于生产),可以使用该工具将开发环境的数据迁移到生产环境,反之亦然。
SQLite 是轻量级的数据库,适合本地开发和测试使用。通过该工具,开发者可以将 MySQL 的生产数据迁移到本地 SQLite 数据库进行测试,而无需连接生产数据库。
某些场景下,开发者可能希望将 MySQL 中的一部分数据导出为 SQLite 进行本地离线分析。SQLite 数据库文件可以非常方便地进行传输和分析操作。

1. 双向迁移功能
2. 图形用户界面(GUI)
3. 日志系统实时反馈
4. 批量处理能力
5. 灵活的数据清理功能

设计界面关键代码:
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow),manager(new DatabaseManager()) // 数据库管理类实例{ui->setupUi(this); // 初始化界面QString qss, mpall;loadQss(":/qss/psblack.css", qss, mpall); // 加载 QSS 样式表,设置界面风格setPalette(QPalette(mpall)); // 应用调色板setStyleSheet(qss); // 应用样式表setWindowTitle(tc("Mysql/SQlite数据库迁移工具 1327666247@qq.com")); // 设置窗口标题}
通过加载样式表,使得整个界面风格统一,采用黑色背景和黄色字体,清晰地展示操作过程中的日志和反馈信息。
功能布局:将界面分为两个选项卡,“MySQL 数据库下载”和“MySQL 数据库上传”用于控制不同方向的数据迁移操作。
用户输入:用户在 GUI 界面输入 MySQL 的连接信息,如 IP 地址、用户名、密码等。然后通过按钮连接到 MySQL。
操作流程:
用户点击按钮后,触发相应的槽函数,进行数据库连接、数据迁移等操作。操作结果会显示在右侧的日志窗口中。
ColorfulTextEdit类用于实现带颜色的日志显示功能,它继承自
QTextEdit,并扩展了根据日志级别显示不同颜色的功能。日志系统是用户体验的关键之一,可以让用户及时获知当前操作的状态(成功、失败、警告等)。
设计界面关键代码:
ColorfulTextEdit::ColorfulTextEdit(QWidget *parent) : QTextEdit(parent) {// 初始化颜色映射colorMap[0] = Qt::red; // 错误信息显示为红色colorMap[1] = Qt::yellow; // 警告信息显示为黄色colorMap[2] = Qt::green; // 成功信息显示为绿色colorMap[3] = Qt::white; // 普通信息显示为白色setStyleSheet("QWidget { background-color: rgb(0, 0, 0); font: 10pt '楷体'; }"); // 设置背景为黑色,字体为楷体}void ColorfulTextEdit::appendTextWithLevel(const QString &text, int level) {// 根据日志级别设置颜色QColor color = colorMap.value(level, Qt::black); // 默认颜色为黑色QTextCharFormat fmt;fmt.setForeground(color); // 设置前景色// 获取当前光标,移动到文本末尾QTextCursor cursor = this->textCursor();cursor.movePosition(QTextCursor::End);cursor.insertText(text + "\n", fmt); // 插入日志信息并换行this->setTextCursor(cursor);}
颜色映射表:不同的日志级别对应不同的颜色。比如,
level=0
表示错误信息,显示为红色,level=2
表示成功信息,显示为绿色。文本插入:每次调用
appendTextWithLevel()
方法,都会将日志文本插入到文本框的末尾,按级别自动换行并显示相应颜色。
特点:
实时的日志反馈使用户能够及时掌握操作进度。
通过颜色区分日志类型,直观反映成功与错误信息。
DatabaseManager
类是该项目的核心功能模块,它封装了与 MySQL 和 SQLite 的交互逻辑,负责管理数据库连接、数据查询和迁移等操作。
连接数据库的功能:
连接 MySQL 数据库:
bool DatabaseManager::connectToMySQL(const QString &host, const QString &user, const QString &password, const QString &databaseName) {mysqlDb.setHostName(host); // 设置主机名mysqlDb.setUserName(user); // 设置用户名mysqlDb.setPassword(password); // 设置密码mysqlDb.setDatabaseName(databaseName); // 设置数据库名return mysqlDb.open(); // 打开连接}
通过传递 MySQL 数据库的连接参数(主机、用户名、密码、数据库名)来创建数据库连接。成功后即可操作 MySQL。
连接 SQLite 数据库:
bool DatabaseManager::connectToSQLite(const QString &databaseName) {sqliteDb.setDatabaseName(databaseName); // 设置 SQLite 文件路径return sqliteDb.open(); // 打开 SQLite 数据库连接}
特点:
该类封装了数据库操作,使得数据库连接、查询、迁移等操作抽象化。这样主界面和数据库操作分离,降低了代码耦合度。
MainWindow
类负责界面和业务逻辑的绑定。每个操作按钮的点击会触发相应的槽函数,调用 DatabaseManager
中的方法完成具体的数据库操作。
连接 MySQL 按钮的槽函数:
void MainWindow::on_btn_connected_Down_clicked() {// 连接到 MySQL 数据库if (!manager->connectToMySQL(ui->mysqlHost_down->text(),ui->mysqlUser_down->text(),ui->mysqlPassword_down->text(),ui->mysqlDatabaseName_down->text())) {writeRunTimeMsgs(tc("MySql数据库链接失败"), 0); // 连接失败,显示红色日志return;}// 连接成功,获取表名列表并显示在下拉框中QStringList names = manager->getMySQLTableNames();ui->com_sqlTabNames->clear();ui->com_sqlTabNames->addItems(names); // 将表名添加到 UI 下拉框writeRunTimeMsgs(tc("数据库链接成功,当前数据库有【%1】个表").arg(names.size()), 1); // 显示黄色日志}
特点:
MainWindow
类集中处理所有用户交互,将操作按钮与数据库操作逻辑绑定。它通过按钮触发各类数据库操作,并通过日志系统将结果反馈给用户。
核心迁移功能是将 MySQL 数据库中的数据导出到 SQLite 数据库文件中。DatabaseManager::transferDataToSQLite()
实现了这个功能。
MySQL 到 SQLite 的迁移逻辑:
bool DatabaseManager::transferDataToSQLite(const QString &tableName) {// 获取 MySQL 表结构并在 SQLite 中创建表QString createSQL = getCreateTableSQL(tableName);executeSQLiteQuery(createSQL); // 执行 SQLite 的建表语句// 从 MySQL 读取表数据QSqlQuery readQuery = getMySQLQuery("SELECT * FROM " + tableName);// 准备在 SQLite 中插入数据QSqlQuery writeQuery(sqliteDb);QString insertSQL = "INSERT INTO " + tableName + " (";// 构建插入 SQL 语句// ...// 遍历 MySQL 数据并插入 SQLitewhile (readQuery.next()) {// 将 MySQL 中的每一行数据插入 SQLite// ...}return true; // 如果迁移成功,返回 true}
流程:首先在 SQLite 中创建与 MySQL 表结构相同的表,然后从 MySQL 中逐行读取数据,并插入到 SQLite 中。
特点:通过 QSqlQuery 执行查询和插入操作,确保数据按原始结构和内容迁移。
数据回迁功能将 SQLite 数据上传回 MySQL 数据库,用于数据恢复等场景。
SQLite 到 MySQL 回迁代码:
bool DatabaseManager::uploadDataToMySQL(const QString &tableName) {if (!openSQlite()) {qWarning() << "Failed to open SQLite database.";return false;}// 检查 SQLite 表是否存在QSqlQuery checkQuery(sqliteDb);// ...// 读取 SQLite 中的数据QSqlQuery readQuery = getSQLiteQuery("SELECT * FROM " + tableName);QSqlQuery writeQuery(mysqlDb);// 逐行读取 SQLite 数据并插入 MySQLwhile (readQuery.next()) {for (int i = 0; i < numFields; ++i) {QVariant value = readQuery.value(i);writeQuery.bindValue(i, value); // 绑定数据到 MySQL 插入语句}writeQuery.exec(); // 执行插入操作}return true; // 数据上传成功}
特点:该函数实现了从 SQLite 读取数据并逐行插入到 MySQL,帮助用户实现数据恢复或同步。







●Qt/C++开源项目:基于TCP调试工具(工程源码联系作者发送文章链接)
●Qt/C++开源控件: 动态时钟,可替换背景(工程源码联系博主)





