想在网页里点击按钮,实现数据库的备份。纯java代码实现
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
public class DatabaseBackup {
public static void backup(String url, String username, String password, String backupFilePath) {
try {
// 建立数据库连接
Connection con = DriverManager.getConnection(url, username, password);
// 创建Statement对象,用于执行SQL查询
Statement stmt = con.createStatement();
// 查询所有表的表名
ResultSet rsTables = stmt.executeQuery("SHOW TABLES");
// 创建备份文件
BufferedWriter writer = new BufferedWriter(new FileWriter(backupFilePath));
ArrayList<String> tableNames = new ArrayList<>();
while (rsTables.next()) {
String tableName = rsTables.getString(1);
tableNames.add(tableName);
}
// 遍历所有表并导出结构和数据
for(int i=0;i<tableNames.size();i++){
// 获取表结构的DDL语句
ResultSet rsDDL = stmt.executeQuery("SHOW CREATE TABLE " + tableNames.get(i));
if (rsDDL.next()) {
String createTableSql = rsDDL.getString(2);
writer.write(createTableSql + ";\n");
System.out.println(createTableSql);
}
rsDDL.close();
// 在获取表数据之前重新创建Statement
Statement stmtData = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
stmtData.setFetchSize(Integer.MIN_VALUE);
ResultSet rsData = stmtData.executeQuery("SELECT * FROM " + tableNames.get(i));
// 将数据保存在内存中
ResultSetMetaData meta = rsData.getMetaData();
int columnCount = meta.getColumnCount();
StringBuilder insertSql = new StringBuilder();
while (rsData.next()) {
insertSql.append("INSERT INTO ").append(tableNames.get(i)).append(" VALUES (");
for (int j = 1; j <= columnCount; j++) {
Object value = rsData.getObject(j);
if (value != null) {
insertSql.append("'").append(value.toString().replace("'", "''")).append("'");
} else {
insertSql.append("NULL");
}
if (j < columnCount) {
insertSql.append(", ");
}
}
insertSql.append(");\n");
// 写入备份文件
// writer.write(insertSql.toString());
// rsData.close();
// stmtData.close();
}
System.out.println(insertSql);
writer.write(insertSql.toString());
rsData.close();
stmtData.close();
}
// 关闭连接和相关资源
rsTables.close();
stmt.close();
con.close();
writer.close();
System.out.println("Database backup successful.");
} catch (SQLException | IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// JDBC连接信息
String url = "jdbc:mysql://localhost:3306/sheng_xin_jian_cai?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false";
String username = "root";
String password = "123456";
// 备份文件路径
String backupFilePath = "E:/test/path_to_backup_file.sql";
backup(url, username, password, backupFilePath);
}
}