您的位置:首页 > 编程语言 > Java开发

Java实现SQLServer的数据库备份与还原

2012-07-03 21:33 513 查看
import java.io.*;

import java.text.SimpleDateFormat;

import javax.servlet.*;

import javax.servlet.http.*;

import java.sql.*;

//---------------------------------

// java mssql数据库的备份与还原

//---------------------------------

public class SqlBak extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet

{

    static final long serialVersionUID = 1L;

    public SqlBak() {super();} 

    //----------------------------------

    // POST请求

    //----------------------------------

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

    {

        doGet(request,response);

    }

    //----------------------------------

    // Get请求

    //----------------------------------

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

    {

        Connection conn = null;

        try

        {

            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();

            String url="jdbc:sqlserver://localhost:1433;databaseName=db_test;user=sa;password=123";

            conn= DriverManager.getConnection(url);

            //----------------------

            // 数据库备份

            // 参数:

            //     存盘路径

            //     要备份的数据库名称

            //     数据库连接对象

            //     返回结果:备份名称

            //----------------------

            //String bkname = bkData("C:\\", "db_test", conn);

            //response.getWriter().print("back name:"+bkname);//输出备份的名称

            //----------------------

            // 数据库还原  

            // 参数:

            //     备份文件存盘路径

            //     备份文件名称

            //     要还原的数据库名称

            //     数据库连接对象

            //     返回结果:true | false

            //----------------------

            //boolean result = hfData("C:\\","20091118104911.bak","db_test",conn);

            //response.getWriter().print("result:"+result);

        }

        //异常

        catch(Exception e)

        {

            e.printStackTrace();

        }

        //释放连接

        finally

        {

            try{conn.close();}catch(Exception e){}

        }

    }  

    //----------------------------------

    // 数据库备份

    // 参数:

    //     存盘路径

    //     要备份的数据库名称

    //     数据库连接对象

    //----------------------------------

    public static String  bkData(String path,String db_name,Connection conn)

    {

        String bk_name = ""; //要返回的备份名称

        //盘名是否正确

        if(path.lastIndexOf("\\") == -1) path += "\\";

        //------------------------

        // 与数据库进行操作

        //------------------------

        PreparedStatement stmt = null;

        String sql = "";

        try

        {

            String file = new SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date())+".bak";

            sql = "backup database "+db_name+" to disk='"+path+file+"' with format,name='full backup of "+db_name+"'";

            stmt = conn.prepareStatement(sql);

            stmt.executeUpdate();

            bk_name = file; //返回的文件名

        }

        //异常

        catch(Exception e)

        {

            e.printStackTrace();

        }

        //状态集释放

        finally

        {

            try{stmt.close();} catch(Exception e){}

        }

        //返回

        return bk_name;

    }

    //----------------------------------

    // 数据库恢复

    // 参数:

    //     备份文件存盘路径

    //     备份文件名称

    //     要还原的数据库名称

    //     数据库连接对象

    //----------------------------------

    public static boolean hfData(String path,String bk_name,String db_name,Connection conn)

    {

        boolean result = false; //要返回的备份名称

        //盘名是否正确

        if(path.lastIndexOf("\\") == -1) path += "\\";

        //------------------------

        // 与数据库进行操作

        //------------------------

        PreparedStatement stmt = null;

        String sql = "";

        try

        {

            sql = "alter database "+db_name+" set offline with rollback immediate;";

            sql += "restore database  "+db_name+"  from disk='" + path+bk_name + "'";

            sql += "with replace "; //解决备尚未备份数据库 数据库 的日志尾部

            sql += "alter database  "+db_name+"  set onLine with rollback immediate;";

            stmt = conn.prepareStatement(sql);

            stmt.executeUpdate();

            result = true;

        }

        //有异常

        catch(Exception e)

        {

            e.printStackTrace();

        }

        //数据库操作释放

        finally

        {

            try{stmt.close();} catch(Exception e){}

        }

        //返回

        return result;

    }           
}

来自:http://www.chinasb.org/archives/2010/08/119.shtml
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息