文档章节

Java MySQL数据库备份和还原

myscorpio
 myscorpio
发布于 2017/06/10 15:15
字数 766
阅读 87
收藏 1

可以由文件对话框选择备份路径和还原文件所在路径

**需要配置MySQL环境变量 **

源码下载地址

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FileDialog;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.sql.Connection;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;


//-------------------------数据备份与还原----------------//
public class Backup extends JFrame implements ActionListener{
  JPanel contentPane;
  JPanel panBack = new JPanel();
 
  JTextField txtPthBack = new JTextField("");
  
  JTabbedPane tab = new JTabbedPane();
  JPanel pnlReload = new JPanel();
  JTextField txtPathReLoad = new JTextField();
  
  JButton btnCopy = new JButton("备份");
  JButton btnReload = new JButton("还原"); 
  JButton btnCreate = new JButton("创建...");
  JButton btnFind = new JButton("载入...");
  private FileDialog fd;
  private Connection con;
	public Backup(){
		setup();
		//--------------注册监他听器-------------//
		btnCopy.addActionListener(this);
		btnReload.addActionListener(this);
		btnCreate.addActionListener(this);
		btnFind.addActionListener(this);
		addWindowListener(new WindowCloser());	
	}
	public void setup(){
		contentPane = (JPanel) getContentPane();
      contentPane.setLayout(new BorderLayout());
      setTitle("数据备份与还原");
      contentPane.setBorder(BorderFactory.createRaisedBevelBorder());
      panBack.setBorder(BorderFactory.createEtchedBorder());
      panBack.setLayout(null);
      txtPthBack.setBounds(new Rectangle(50, 97, 186, 30));
      txtPthBack.setEditable(false);
      btnCreate.setBounds(new Rectangle(253, 97, 98, 30));
      pnlReload.setBorder(BorderFactory.createEtchedBorder());
      pnlReload.setLayout(null);
      
      txtPathReLoad.setBounds(new Rectangle(50, 97, 186, 30));
      txtPathReLoad.setEditable(false);
      btnFind.setBounds(new Rectangle(253, 97, 98, 30));
      btnReload.setBounds(new Rectangle(264, 164, 80, 30));
      btnCopy.setBounds(new Rectangle(264,164, 80, 30));
      panBack.add(txtPthBack);
      panBack.add(btnCopy);
      panBack.add(btnCreate);
      tab.add(panBack, "备份");
      tab.add(pnlReload, "还原");
      
      pnlReload.add(btnFind);
      pnlReload.add(txtPathReLoad);
      pnlReload.add(btnReload);
      contentPane.add(tab, java.awt.BorderLayout.CENTER);
      setResizable(false);
      setSize(new Dimension(400, 300));
	   	Dimension screen=Toolkit.getDefaultToolkit().getScreenSize();
	   	setLocation((screen.width-this.getWidth())/2,(screen.height-this.getHeight())/2);
	   	setVisible(true);
	}
	/*行为处理**/
	public void actionPerformed(ActionEvent e){
		if(e.getSource()==btnCopy){
			if(backup()){
				JOptionPane.showMessageDialog(null,"备份成功!","提示",JOptionPane.PLAIN_MESSAGE);
			}else JOptionPane.showMessageDialog(this,"备份失败!","提示",JOptionPane.ERROR_MESSAGE);
		}else if(e.getSource()==btnReload){
			restore();
			if(restore()){
				JOptionPane.showMessageDialog(null,"还原成功!","提示",JOptionPane.PLAIN_MESSAGE);
			}else JOptionPane.showMessageDialog(this,"还原失败!","提示",JOptionPane.ERROR_MESSAGE);
		}else if(e.getSource()==btnFind){
  			fd=new FileDialog(this,"还原数据库",FileDialog.LOAD);
  			fd.setVisible(true);
  			if(fd.getFile()!=null){
	   			txtPathReLoad.setText(fd.getDirectory()+fd.getFile());
	   		}
	   		fd.dispose();
  		}else if(e.getSource()==btnCreate){
  			fd=new FileDialog(this,"备份数据库文件",FileDialog.SAVE);
	   		fd.setVisible(true);
	   		if(fd.getFile()!=null){
	   			txtPthBack.setText(fd.getDirectory()+fd.getFile());
	   		}
	   		fd.dispose();
  		}
	}
	/** 
     * 备份数据库 
     * @return 成功:TRUE 失败:FALSE 
     */  
	public boolean backup(){  
        
        String backFilePath = "";  
        String backDirString = txtPthBack.getText();//默认备份库  
        try {  
                backFilePath =txtPthBack.getText();//要备份的文件  
                File backDir = new File(backDirString);  
                if(!backDir.exists()){//存放库的文件夹不存在  
                    backDir.mkdir();  
            }  
            //判断要备份的文件是否已存在  
            File backFile = new File(backFilePath);  
            if(backFile.exists()){  
                backFile.delete();  
            }  
            Runtime runt = Runtime.getRuntime();  
            Process proc = runt.exec(getBackupShellString());  
            int tag = proc.waitFor();//等待进程终止  
            if(tag==0){  
                return true;  
            }else{  
                return false;  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
            return false;  
        }            
    }  
	/** 
     * 根据路径生成备份数据库的Shell字符串 
     * @return 实际执行的shell命令 
     */  
	public String getBackupShellString(){  
       String backFile = "";  
       SimpleDateFormat myFmt=new SimpleDateFormat("yyyyMMddHHmmss");
       Date now=new Date();
           backFile = txtPthBack.getText()+"_"+myFmt.format(now)+".sql";//要备份的文件  
       String OSType = System.getProperty("os.name");  
       String shellStr = "";  
       if(OSType.indexOf("Windows")!=-1){  
           shellStr ="mysqldump -h localhost -P3306 -uroot -pscorpio --result-file="+backFile+" --default-character-set=gbk phonesell";  
       }else{  
           shellStr ="mysqldump -h localhost -P3306 -uroot -pscorpio --result-file="+backFile+" --default-character-set=gbk phonesell";  
       }  
       return shellStr;  
   }  
	/** 
     * 恢复数据库 
     * @return 成功:TRUE 失败:FALSE 
     */  
    public boolean restore(){  
    	 String fPath="";  
         try {  
        	 fPath=txtPathReLoad.getText(); 
             Runtime rt = Runtime.getRuntime();      
             // 调用 mysql 的 cmd:      
             Process child = rt.exec("mysql -uroot -pscorpio phonesell");         
	         OutputStream out = child.getOutputStream();//控制台的输入信息作为输出流      
	         String inStr;      
	         StringBuffer sb = new StringBuffer("");      
	         String outStr;   
	         //下面的InputStreamReader和OutputStreamWriter的第二个参数为数据的编码格式,      
	         // 要跟备份的格式一样,否则会有异常:java.io.IOException: 管道已结束。  
	         BufferedReader br=new BufferedReader(new InputStreamReader( new FileInputStream(fPath), "gbk"));      
             while ((inStr = br.readLine()) != null) {  
                 sb.append(inStr + "/r/n");      
             }      
             outStr = sb.toString();      
             OutputStreamWriter writer = new OutputStreamWriter(out, "gbk");      
             writer.write(outStr);      
             writer.flush();      
             // 关闭输入输出流      
             out.close();      
             br.close();      
             writer.close();       
             return true;
         } catch (Exception e) {      
             e.printStackTrace();      
         }      
    	return false;
    }  
	/*关闭窗体*/
	private class WindowCloser extends WindowAdapter{
		public void windowClosing(WindowEvent we){
			Backup.this.dispose();
			System.exit(0);
		}
	}
	public static void main(String args[]){		
		new Backup();
	}
}

© 著作权归作者所有

myscorpio
粉丝 0
博文 2
码字总数 867
作品 0
成都
私信 提问
follow大神教程——实践java爬虫之六

朕已无力吐糟实验室的网速了。。。 10点半左右开机,网线、wifi都连不上,右下角wifi连上但有黄色叹号, QQ错误码:0x00000001 表示访问网络失败 ipconfig,擦,本机为私有IP,连路由器都连不...

realsa
2014/07/03
301
0
pld mysql 备份还原 jdk tomcat

mysql 安装 : http://jingyan.baidu.com/article/a378c9609eb652b3282830fd.html 数据库数据表导入导出: (1)导出整个数据库(包括数据库中的数据) mysqldump -u username -p dbname > db...

岱然_
2016/04/30
2
0
java 实现 通用的数据库备份和恢复

要用java xml 实现, sqlserver和mysql等数据库的备份和还原。也就是说让SQL Server的备份,恢复到SQL Server 或MySQL。MySQL的备份,恢复到SQL Server 或MySQL。 各位能不能说说具体讲这方面...

王震、末将在
2012/06/27
854
4
java如何备份/还原mysql

想请教一下java 在web中如何备份与还原mysql ? 难道只能用 Runtime.getRuntime().exec("mysql备份/还原操作指令")方法吗 ?

真的农夫三拳
2011/05/19
316
1
java web项目中除了用mysqldump,还有其他备份/还原mysql数据库的方法吗?

网上查了一圈资料,发现很多都是用mysqldump,作为java备份/还原MYSQL数据库的解决方案。 那是除了这个还有更好的方式和兼容性的解决方案? 我不想用msyqldump主要顾虑: 1、服务器操作系统不...

听_风
2015/02/05
1K
5

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
2.7K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
4
0
用好项目管理工具,人人都可以成为项目经理

现在市面上的项目管理工具越来越多了,但是大多数都是一些协同工具或轻量项目管理工具。如果是多团队、跨部门使用或者企业级的项目管理,从管理思想到工具运用,需要适应企业的业务流程体系,...

cs平台
昨天
12
0
只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
69
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部