java程序 备份和还原SqlServer 2008 数据

来源:互联网 发布:c语言字符串长度函数 编辑:程序博客网 时间:2024/06/13 21:58

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class DatabaseBack extends MultiActionController{
public void backDatabase(HttpServletRequest request,HttpServletResponse response) throws Exception{
String ip="192.168.1.250";
String port="1433";
String databaseName="MYBATIS";
String userName="sa";
String password="sa";
Connection conn = null;

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String connectionUrl="jdbc:sqlserver://"+ip+":"+port+";databaseName="+databaseName;
conn= DriverManager.getConnection(connectionUrl,userName,password);
String rootPath = request.getRealPath("/upload/backupdb/")+"\\\\";
//System.out.println(rootPath);
//数据备份
// String bkname = DataBackup(rootPath,databaseName, conn);

//数据还原
boolean result = DataReduction(rootPath,"20150311165216.bak","MYBATIS",conn);
response.getWriter().print(true);
}

/**
* 数据备份
* @param path
* @param db_name
* @param conn
* @return
*/
public String DataBackup(String rootPath,String db_name,Connection conn){
String bk_name = ""; //要返回的备份名称
//盘名是否正确
if(rootPath.lastIndexOf("\\") == -1) rootPath += "\\";
PreparedStatement stmt = null;
String sql = "";
try {
String file = new SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date())+".bak";
sql = "backup database "+db_name+" to disk='"+rootPath+file+"' with format,name='full backup of "+db_name+"'";
stmt = conn.prepareStatement(sql);
stmt.executeUpdate();
bk_name = file; //返回的文件名
} catch (SQLException e) {
e.printStackTrace();
}finally{
try{stmt.close();} catch(Exception e){}
}
return bk_name;
}

/**
* 数据还原
* @param path
* @param bk_name
* @param db_name
* @param conn
* @return
*/
public boolean DataReduction(String rootPath,String bk_fileName,String db_name,Connection conn)
{
boolean result = false; //要返回的备份名称
//盘名是否正确
if(rootPath.lastIndexOf("\\") == -1) rootPath += "\\";
//------------------------
// 与数据库进行操作
//------------------------
PreparedStatement stmt = null;
String sql = "";
try
{
sql = "alter database "+db_name+" set offline with rollback immediate;";
sql += "restore database "+db_name+" from disk='" + rootPath+bk_fileName + "'";
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;
}
}

注:参考网上资料所写