package com.ncs.opts.face.system.action;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;

import java.util.List;
import java.util.Map;
import java.util.Properties;
import com.ncs.opts.face.common.BasicAction;

/**
 * 
 * 属性文件jdbc.properties内容如下
 * 
 * Jdbc.username = icpside
 * 
 * Jdbc.password = icpside
 * 
 * mysqlpath = C:\\Program Files\\MySQL\\MySQL Server 5.1\\bin\\ MYSQL 安装路径
 * 
 * sqlpath = D:\\mysqlback\\ 备份路径
 * 
 * sqlName = 要备份的文件名称 例如:beifen.sql
 * 
 * @author MH
 * 
 */
@Namespace("/sys")
@ParentPackage("opts-default")
@InterceptorRefs( { @InterceptorRef("annotationInterceptor"),
		@InterceptorRef("defaultStack") })
@Results( {
		@Result(name = "bakDatabaseSuccess", location = "/sys/databasemanager.jsp"),
		@Result(name = "bakDatabaseError", location = "/sys/databasemanager.jsp"),
		@Result(name = "loadSuccess", location = "/sys/databasemanager.jsp"),
		@Result(name = "loadError", location = "/sys/databasemanager.jsp"),
		@Result(name = "OK", location = "/sys/mapview.jsp"),

})
public class DataBaseManagerAction extends BasicAction {
	private List<String> list;
	
	private Map<String, String> map;

	public List<String> getList() {
		return list;
	}

	public void setList(List<String> list) {
		this.list = list;
	}

	public Map<String, String> getMap() {
		return map;
	}

	public void setMap(Map<String, String> map) {
		this.map = map;
	}

	private InputStream configFile;
	private Properties props;

	public String getProperty(String property) {
		return props.getProperty(property);
	}

	public void loadConfig() throws IOException {
		// 当前类文件目录下的文件
		configFile = getClass().getResourceAsStream("/jdbc.properties");
		props = new Properties();
		props.load(configFile);
	}

	/**
	 * 数据备份
	 * 
	 * @return
	 */
	@Action("bakDatabase")
	public String bakDatabase() {

		String backup = backup();

		if (backup.equals("0")) {
			this.addActionMessage("数据库备份成功!");
			return "bakDatabaseSuccess";
		} else {
			this.addActionError("数据库备份失败,请检查配置文件是否配置有误!");
			return "bakDatabaseError";
		}

	}

	/**
	 * 还原数据
	 * 
	 * @return
	 */
	@Action("recoverDatabase")
	public String recoverDatabase() {
		String load = load();

		if (load.equals("0")) {
			this.addActionMessage("数据库还原成功!");
			return "loadSuccess";
		} else {
			this.addActionError("数据库还原失败,请检查配置文件是否配置有误!");
			return "loadError";
		}

	}

	/**
	 * mysql数据备份 接收脚本名,并返回此路径 sqlName为备份的脚本名比如xxx.sql 并返回结果 0为成功1为失败
	 */
	public static String backup() {

		// 这里是读取的属性文件,也可以直接使用

		String sqlName = getPprVue("data.name");

		String root = getPprVue("jdbc.username");

		String pass = getPprVue("jdbc.password");

		String mysqlpaths = getPprVue("mysqlpath");

		String sqlpath = getPprVue("sqlpath");

		File backupath = new File(sqlpath);

		if (!backupath.exists()) {

			backupath.mkdir();

		}

		String command = mysqlpaths;// mysql的bin路径

		command += "mysqldump ";

		command += "--opt ";

		// command+="--complete-insert ";

		command += "-h localhost ";

		command += "--user=" + root + " ";

		command += "--password=" + pass + " ";

		command += "--lock-all-tables=true ";

		command += "--result-file=" + sqlpath + sqlName + " ";

		command += "icpdb ";// 数据库名称

		// command+="> D:/mysqlback/uuu.sql ";

		// 得到MYSQL的用户名密码后调用 mysql 的 cmd:

		try {
			Process p = Runtime.getRuntime().exec(command);
			
			System.out.println(command);

			// 设置输出流编码为utf8。为了防止乱码
			InputStreamReader ir = new InputStreamReader(p.getInputStream(),
					"utf8");

			LineNumberReader input = new LineNumberReader(ir);

			String line;

			while ((line = input.readLine()) != null)
				System.out.println(line);

			input.close();
			System.out.println("/* 数据库备份成功! */");
			return "0";

			// 0代表成功,1代表失败
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "1";
	}

	/**
	 * mysql数据恢复 接收脚本路径,并返回结果 0为成功1为失败
	 */
	public static String load() {

		try {

			Runtime rt = Runtime.getRuntime();

			String sqlpath = getPprVue("sqlpath");

			String sqlName = getPprVue("data.name");

			String root = getPprVue("jdbc.username");

			String pass = getPprVue("jdbc.password");

			// 得到MYSQL的用户名密码后调用 mysql 的 cmd:

			Process child = rt.exec(getPprVue("mysqlpath") + "mysql -u "

			+ root + " -p" + pass + " icpdb");

			OutputStream out = child.getOutputStream();// 控制台的输入信息作为输出流

			String inStr;

			StringBuffer sb = new StringBuffer("");

			String outStr;

			BufferedReader br = new BufferedReader(new InputStreamReader(

			new FileInputStream(sqlpath + sqlName), "utf8"));

			while ((inStr = br.readLine()) != null) {

				sb.append(inStr + "\r\n");

			}

			outStr = sb.toString();

			OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");

			writer.write(outStr);

			// 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免

			writer.flush();

			// 别忘记关闭输入输出流

			out.close();

			br.close();

			writer.close();

			System.out.println("/* 数据库还原成功! */");

			return "0";

			// 0代表成功,1代表失败

		} catch (Exception e) {

			e.printStackTrace();

		}

		return "1";

	}

	// 读取属性值

	public static String getPprVue(String properName) {

		String properValue = null;
		try {
			DataBaseManagerAction pro = new DataBaseManagerAction();
			pro.loadConfig();
			// 读取对应的KEY
			properValue = pro.getProperty(properName);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return properValue;
	}

	// public static void main(String[] args) throws IOException {
	// String backup = backup();
	// System.out.println(backup);
	// String load = load();
	// System.out.println(load);
	// }

	@Action("getMAP")
	public String getMAP() {

		if (null != list && list.size() > 0) {
			for (int i = 0; i < list.size(); i++) {
				System.out.println(list.get(i));
			}
		}

		if (null != map && map.size() > 0) {
			System.out.println(map.get("name"));
			System.out.println(map.get("pass"));
		}
		return "OK";
	}
public static void main(String[] args) {
	String command = "G:\\MySQL Server 5.1\\bin mysqldump --opt -h localhost --user=root --password=icpside --lock-all-tables=true --result-file=D:\\mysqlback\\backNm.sql icpdb";
	try {
		Process p = Runtime.getRuntime().exec(command);
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}
}
最近下载更多
nurmamat001  LV2 2022年11月1日
wumingming  LV1 2020年11月5日
阿凝是个小可爱  LV14 2020年5月22日
13043860zj  LV16 2020年3月6日
lyd19931203  LV21 2019年12月11日
唐唐丶  LV33 2019年9月26日
123aaaaawd  LV12 2019年8月20日
dachoumomo  LV12 2019年7月23日
莫灬嚣张  LV6 2019年3月19日
qq777444  LV4 2019年2月26日
最近浏览更多
953558449 3月22日
暂无贡献等级
卢本伟不开挂  LV4 2023年9月3日
3263394665  LV9 2023年7月10日
sfy_1802661689  LV2 2023年7月3日
lironggang  LV38 2023年4月25日
hhhhhz  LV7 2022年11月20日
Dominick  LV14 2022年11月17日
qq1176648922  LV6 2022年11月9日
wzh200808 2022年11月7日
暂无贡献等级
nurmamat001  LV2 2022年11月1日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友