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