java程序 导出数据库脚本

自定义一个Listener,每天在特定时间备份数据库:

public class AutoBackUpListener implements ServletContextListener{
	
	private Timer timer;
	
	public void contextDestroyed(ServletContextEvent arg0) {
		 System.out.println("shut down task.");
		 timer.cancel(); //Terminate the timer thread
	}

	public void contextInitialized(ServletContextEvent arg0) {
		timer = new Timer(); 
		System.out.println("begin task.");
		 
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.HOUR_OF_DAY, 03);//   3:30 am 备份数据库
		calendar.set(Calendar.MINUTE, 30);
		calendar.set(Calendar.SECOND, 0);
		Date time = calendar.getTime();
		timer = new Timer();
		//timer.schedule(new RemindTask(), time);
        timer.scheduleAtFixedRate(new Beifen(), time, 1000*60*60*24);//每天执行一次
	   
	}

	class Beifen extends TimerTask {
		private String user_name;//数据库用户名   
	    private String user_psw;//数据库密码   
	    private String db_name;// 需要备份的数据库名   
	    private String host_ip;   
	    private String user_charset;   
	    private String backup_path; //存放备份文件的路径   
	    private String stmt;   
	    public Beifen(){}
	    
	    public Beifen(String user_name,String user_psw,String db_name,String host_ip,String user_charset,String backup_path){   
	        this.user_name=user_name;   
	        this.user_psw=user_psw;   
	        this.db_name=db_name;   
	        //主机IP;   
	        if(host_ip==null||host_ip.equals(""))   
	            this.host_ip="localhost";//默认为本机   
	        else  
	            this.host_ip=host_ip;   
	        //字符集   
	        if(user_charset==null||user_charset.equals(""))   
	            this.user_charset=" "; //默认为安装时设置的字符集   
	        else  
	            this.user_charset=" --default-character-set="+user_charset;   
	        this.backup_path=backup_path;   
	  
	        /*this.stmt="C:\\Program Files\\MySQL\\MySQL Server 5.0\\bin\\mysqldump "+this.db_name+" -h "+this.host_ip+" -u"+this.user_name+" -p"+this.user_psw   
	                +this.user_charset+" --result-file="+this.backup_path; */  
	         this.stmt="D:\\AppServ\\MySQL\\bin\\mysqldump "+this.db_name+" -h "+this.host_ip+" -u"+this.user_name+" -p"+this.user_psw   
            +this.user_charset+" --result-file="+this.backup_path;
	    } 
	   
	    public boolean backup_run(){   
	        boolean run_result=false;   
	        try{   
	            Runtime.getRuntime().exec(this.stmt);   
	            run_result=true;   
	        }catch(Exception e){   
	            e.printStackTrace();   
	        }finally{   
	            return run_result;   
	        }   
	    } 
	    
		@Override
		public void run() {
			Beifen backup=new Beifen("root","root","tansuo_mobile",null,"utf8","d:\\tansuo_moblie.sql");   
	        boolean result=backup.backup_run();   
	        if(result)   
	            System.out.println("备份成功");
		}
		
	}
	

}

 

 使用jsp 流从服务器下载该sql文件:

 
<%@ page language="java" pageEncoding="utf-8"%>
<%@ page import="java.io.OutputStream,java.io.File,java.io.FileInputStream"%>
<%@page import="java.io.PrintWriter"%>
<html>
  <head>
  
    <title>JSP流文件下载</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">

  </head>
  
  <body>
   <%      
          response.reset();
          OutputStream o =response.getOutputStream();     
          byte   b[]=new   byte[500];  
          String path = "d:\\tansuo_moblie.sql"; //要下载的文件路径
          String myName = "数据库备份.sql";        //默认保存的名字
          //String path = request.getSession().getServletContext().getRealPath("/");
         // if(path.endsWith("\\"))
          //{
           //   path+="upload\\excelfiles\\TransInfo.xls";
          //}
          //else
          //{
            //  path+="upload\\excelfiles\\TransInfo.xls";
          //}
          File fileLoad=new File(path);  
          response.reset();  
          response.setCharacterEncoding("GBK"); 
          request.setCharacterEncoding("GBK"); 
          
          response.setContentType("application/octet-stream; charset=GBK");     
		  response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(myName.getBytes("gb2312"),"iso8859-1") + "\"");  
        
          long   fileLength=fileLoad.length();   
          String   length=String.valueOf(fileLength);   
          response.setHeader("Content_Length",length);   
          FileInputStream   in=new   FileInputStream(fileLoad);   
          int   n=0;   
          while((n=in.read(b))!=-1){ 
             o.write(b,0,n);
          }  
		   
          in.close();
          o.close();
         
  %>
  </body>
</html>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、简介 1.1前言 1、由于最近工作一直用Oracle,故对Oracle数据库研究为对象。 2、根据工作业务需求实际情况进行功能研发。为什么要开发呢?因为在数据库升级或者迁移的时候,为了保证不同环境不同数据库数据保持同步,故数据库SQL脚本非常作用。比如:数据库脚本,副脚本,增量脚本。 3、 什么是主脚本、副脚本、增量脚本呢? 3.1、主脚本数据库表或存储过程,视图脚本,序列等脚本。 3.2、副脚本指必须执行主脚本之后才执行的脚本。换句话说在没执行主键脚本的情况下,副脚本执行之后会回滚事务失败。 3.3、增量脚本指在执行主脚本或副脚本之后,根据需求对某个表添加/修改约束(主外键约束,长度约束等),添加/修改字段/添加数据等情况对数据库结构改变处理的一种行为脚本。 1.2作用 1、 快速产出自定义规则需要的SQL脚本。 2、减少人工编写SQL脚本出错率问题,完全通过程序检测SQL准确性。 3、帮助开发人员提高SQL编写效率,减少人工编写SQL开发成本问题。 4、帮助开发人员节约时间,同时避免繁琐不必要编写SQL的工作。 二、实现方式与原理 2.1实现方式 1、实现方式分:正向与逆向实现。什么是正向与逆行呢【是否有鸡还是有蛋,先后道理同等】 2、正向方式:首先把设计好数据库表文档,把所有表的字段属性配置到EXCEL或者CSV格式的文件通过JXL/POI技术去读取文件的字段,再通过其他技术一系列程序处理之后生成所需要的SQL脚本。 3、逆向方式:首先有数据库表,然后通过ORM持久化技术连接数据库再读取表的字段等属性出来,再通过其他技术一系列程序处理之后生成所需要的SQL脚本。 2.2原理 对数据库软件内置核心表或视图查询出来存储用户行为表结构所有属性信息,对此属性结构信息进行分析与组装所需要SQL脚本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值