package com.shxt.fsc.db.base;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @ClassName: DBBeiFen
* @date 2015-11-22 下午03:33:06
* @description 进行mysql 数据库的备份和恢复的操作
*/
public class DBBeiFen {
/**
* 数据库的用户名
*/
static String name = "root";
/**
* 数据库的密码
*/
static String password = "root";
/**
* 数据库的名
*/
String dataName = "";
/**
* 放在的目录在哪
*/
String path = "";
/**
*
* 通过对mysql的指令 进行对数据库的备份
* 这里面有几个参数需要注意的
* name,password,dataName都是数据库 名字 密码 数据库名
* path是备份的目录的路径
* @time:2015-11-22 下午03:34:20
*/
public void Benfen() {
InputStream in = null;
InputStreamReader reader = null;
BufferedReader br = null;
FileOutputStream fout = null;
OutputStreamWriter write = null;
try {
Runtime rt = Runtime.getRuntime();
// 这是在控制台写入的语句
String cmd = "mysqldump -h localhost -u" + name + " -p"
+ password +" "+dataName;
// 进行执行
Process pross = rt.exec(cmd);
// 将这个数据进行导出
in = pross.getInputStream();
// 进行转码
reader = new InputStreamReader(in, "utf-8");
//读入的String
String inStr;
// 建立一个SringBuffer进行拼接的作用 提高效率
StringBuffer sb = new StringBuffer();
// 最有进行接收的值
String outStr;
// 在进行套用一个管子
br = new BufferedReader(reader);
// 将cmd中的数据进行去读和拼接
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
//拼接成功
outStr = sb.toString();
//文件名日期的时候的命名
SimpleDateFormat format = new SimpleDateFormat(
"yyyy.MM.dd hh小时mm分ss秒");
String date = format.format(new Date());
File file = new File(path + date + ".sql");
// 导出的地方
fout = new FileOutputStream(file);
// 继续的进行
write = new OutputStreamWriter(fout, "utf-8");
//进行写入
write.write(outStr);
write.flush();
} catch (IOException e) {
e.printStackTrace();
}finally{
//进行关闭流的对象
try {
if(in != null){
in.close();
}
if( reader != null){
reader.close();
}
if(br != null){
br.close();
}
if(fout != null){
fout.close();
}
if(write != null){
write.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
*
* 进行查看文件夹中备份的文件
* 然后通过选择进行恢复数据库
* 传入的url 是文件夹的路径
* @param url
* @return List
*/
public List<String> query(){
List<String> list = new ArrayList();
//建立一个File
File file = new File(path);
//读出目录下的子文件
File[] list_1 = file.listFiles();
//遍历写入list中
for (int i = 0; i < list_1.length; i++) {
list.add(list_1[i].getName());
}
//返回list
return list;
}
/**
*
* 通过传入的文件名进行数据库的恢复
* 通过url的文件 和mysql的指令 进行操作
、
* @time:2015-11-22 下午03:54:54
* @param:@param url
*/
public void getRollBack(String url){
//读取文件
File file = new File( path + url);
//流的声明
BufferedReader reader = null;
OutputStream out = null;
OutputStreamWriter write = null;
try {
//建立读取的文件流 通过utf-8的方式
reader = new BufferedReader(
new InputStreamReader(new FileInputStream(file),"utf-8"));
String inStr;
StringBuffer sb = new StringBuffer();
//读取文件
while((inStr = reader.readLine()) != null){
sb.append(inStr+"\t\n");
}
inStr = sb.toString();
//控制mysql的指令
Runtime rt = Runtime.getRuntime();
String cmd ="mysql -u"+ name +" -p"+password +" "+dataName;
//执行指令
Process pro = rt.exec(cmd);
//得到out的流
out = pro.getOutputStream();
write = new OutputStreamWriter(out,"utf-8");
//读入sql 文件的东西
write.write(inStr);
write.flush();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
//关闭对象流
try {
if(reader != null){
reader.close();
}
if(out != null){
out.close();
}
if(write != null){
write.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
主要就是对mysql 自己的数据库备份的操作,mysqldump 这个语法 要进行掌握。