Java 导出sql文件 与 导入sql文件

2,289 阅读3分钟

导入SQL

方法一:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStreamWriter;
    
public static void exportSQL() {
       try {
	   Runtime rt = Runtime.getRuntime();
	   // 调用 调用mysql的安装目录的命令,若知道mysql安装目录,则“usr/local/mysql/bin/mysqldump”,如果是阿里一类RDS,就直接mysqldump
	   Process child =  rt.exec("/usr/local/mysql/bin/mysqldump -uroot  -p123 -h127.0.0.1 yellow_db");
	   // 设置导出编码为utf-8。这里必须是utf-8
	   // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
	   InputStream in = child.getInputStream();// 控制台的输出信息作为输入流
	   InputStreamReader xx = new InputStreamReader(in, "utf-8");
	   // 设置输出流编码为utf-8。这里必须是utf-8,否则从流中读入的是乱码
	   String inStr;
	   StringBuffer sb = new StringBuffer("");
	   String outStr;
	   // 组合控制台输出信息字符串
	   BufferedReader br = new BufferedReader(xx);
		   while ((inStr = br.readLine()) != null) {
				sb.append(inStr + "\r\n");
		   }
			outStr = sb.toString();
			// 要用来做导入用的sql目标文件:
			FileOutputStream fout;
 			Long startTs = System.currentTimeMillis();
 			StringBuffer p = new StringBuffer("/Users/hes/Documents/SQL/t_user.sql");
                        // 插入的位置,可按照需求修改
 			p.insert(31, startTs.toString());
 			fout = new FileOutputStream(p.toString());
 			OutputStreamWriter writer = new OutputStreamWriter(fout, "utf-8");
			writer.write(outStr);
			writer.flush();
			in.close();
			xx.close();
			br.close();
			writer.close();
			fout.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

方法二
	/**
	 * Java代码实现MySQL数据库导出
	 *
	 * @param hostIP       MySQL数据库所在服务器地址IP
	 * @param userName     进入数据库所需要的用户名
	 * @param password     进入数据库所需要的密码
	 * @param savePath     数据库导出文件保存路径
	 * @param fileName     数据库导出文件文件名
	 * @param databaseName 要导出的数据库名
	 * @return 返回true表示导出成功,否则返回false。
	 */
	public static boolean exportDatabaseTool(String hostIP, String userName, String password, String savePath,
			String fileName, String databaseName) {
		File saveFile = new File(savePath);
		if (!saveFile.exists()) {// 如果目录不存在
			saveFile.mkdirs();// 创建文件夹
		}
		if (!savePath.endsWith(File.separator)) {
			savePath = savePath + File.separator;
		}
		StringBuilder stringBuilder = new StringBuilder();
// 若是阿里的rds则是mysqldump,若有安装目录则/usr/local/mysql/bin/mysqldump		stringBuilder.append("/usr/local/mysql/bin/mysqldump").append(" --opt").append(" -h").append(hostIP);
		stringBuilder.append(" --user=").append(userName).append(" --password=").append(password)
				.append(" --lock-all-tables=true");
		stringBuilder.append(" --result-file=").append(savePath + fileName).append(" --default-character-set=utf8 ")
				.append(databaseName);
		try {
			Process process = Runtime.getRuntime().exec(stringBuilder.toString());
			if (process.waitFor() == 0) {// 0 表示线程正常终止。
				return true;
			}
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return false;
	}

导入sql文件

// 有些用不到,自己筛检吧
import java.io.File;
import java.io.IOException;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStreamWriter;

import java.io.OutputStream;
    
    private static String[] getImportCommand() {  
        String username = "root"; //用户名  
        String password = "123"; //密码  
        String host = "localhost"; //导入的目标数据库所在的主机  
        String port = "3306"; //使用的端口号  
        String importDatabaseName = "admin"; //导入的目标数据库的名称  
        String importPath = "/Users/hes/Documents/SQL/temp.sql"; //导入的目标文件所在的位置  
        // 第一步,获取登录命令语句,指向mysql安装目录 
        String loginCommand = new StringBuffer().append("/usr/local/mysql/bin/").append("mysql -u").append(username).append(" -p").append(password).append(" -h").append(host)  
        .append(" -P").append(port).toString();  
        // 第二步,获取切换数据库到目标数据库的命令语句  
        String switchCommand = new StringBuffer("use ").append(importDatabaseName).toString();  
        // 第三步,获取导入的命令语句  
        String importCommand = new StringBuffer("source ").append(importPath).toString();  
        // 需要返回的命令语句数组  
        String[] commands = new String[] {loginCommand, switchCommand, importCommand};  
        return commands;  
    }
    
    public static void importSql() {  
    	try {
            Runtime runtime = Runtime.getRuntime();  
            //因为在命令窗口进行mysql数据库的导入一般分三步走,所以所执行的命令将以字符串数组的形式出现  
            String cmdarray[] = getImportCommand();//根据属性文件的配置获取数据库导入所需的命令,组成一个数组  
            //runtime.exec(cmdarray);//这里也是简单的直接抛出异常  
            Process process = runtime.exec(cmdarray[0]);  
            //执行了第一条命令以后已经登录到mysql了,所以之后就是利用mysql的命令窗口  
            //进程执行后面的代码  
            OutputStream os = process.getOutputStream();  
            OutputStreamWriter writer = new OutputStreamWriter(os);  
            //命令1和命令2要放在一起执行  
            writer.write(cmdarray[1] + "\r\n" + cmdarray[2]);  
            writer.flush();  
            writer.close();  
            os.close();
    	} catch (IOException e) { 
    		e.printStackTrace(); 
    	}
  
    }