首先我执行这条SQL语句进行还原数据,打开查询分析器,然后还得需要把 可用数据库 切换到 master 才可以还原restore database ZC_NmSoft from disk='D:\bak\2010-08-03.bak' WITH REPLACE,RECOVERY
已为数据库 'ZC_NmSoft',文件 'ZC_NmSoft' (位于文件 1 上)处理了 248 页。
已为数据库 'ZC_NmSoft',文件 'ZC_NmSoft_log' (位于文件 1 上)处理了 2 页。
RESTORE DATABASE 成功处理了 250 页,花费 0.184 秒(11.091 MB/秒)。
执行成功,我现在是想在 程序里面还原 直接点击还原按钮就可以还原,这是我的代码:<form  name="form1" action="/NMSoftware/admin.do?method=dbReduction" method="post" onSubmit="return check(form1)">
<TABLE  cellSpacing=0 cellPadding=0 width="70%" align="center" border=1 bordercolor="#d1e6f7">
<tr>
<td>数据库还原信息:</td>
<td align="center">
原数据库名称:&nbsp;&nbsp;&nbsp;<input type="text" name="dbname" value="ZC_NmSoft" size="25" readonly="readonly">&nbsp;&nbsp;&nbsp;&nbsp;<br/>
数据库还原名称:<input type="text" name="dbpath" value="<%=dbdate1%>" size="25" onFocus="WdatePicker({isShowClear:false,readOnly:true})" >&nbsp;&nbsp;&nbsp;&nbsp;<br/>
<input type="submit" value="还原"></td>
</tr>
</TABLE>
</form>然后传到Action里面 代码如下: public ActionForward dbReduction(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws SQLException, IOException {
response.setCharacterEncoding("gb2312");
response.setContentType("text/html");
AdminForm adminForm = (AdminForm) form;// TODO Auto-generated method stub
//HttpSession session = request.getSession();d:\bak\<%=dbdate1 %>.bak
PrintWriter out=response.getWriter();
String dbname = new String(request.getParameter("dbname").getBytes("ISO-8859-1"),"gb2312");
String sdbpath = new String(request.getParameter("dbpath").getBytes("ISO-8859-1"),"gb2312");
String dbpath = "d:\bak\'"+sdbpath+"'.bak";
SqlBean sq = new SqlBean();
int i =sq.dateReduction(dbname, dbpath);
out.println("<script language=javascript>alert('数据还原成功');window.top.main.location.href='rxdj/dbment.jsp';window.parent.cancel();</script>");
return null;
}这个 是SqlBean.java这里面有个方法: public int dateReduction(String dbname,String dbpath) throws SQLException{
int i = 0;
Connection conn = this.getconnection();
String sql = "restore database ? from disk=? WITH REPLACE,RECOVERY";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, dbname);
pstmt.setString(2, dbpath);
i = pstmt.executeUpdate();
pstmt.close();    
conn.close();
return i;
}
不知道大家能不能看明白 ,现在 点击还原 就会出错的。大家帮帮忙啊!在线等。

解决方案 »

  1.   

    报的什么错?
    把这句打印出来看看 String sql = "restore database ? from disk=? WITH REPLACE,RECOVERY";
      

  2.   

    你在程序里切换到master数据库上了吗?
    这是必须的
      

  3.   

       i = pstmt.executeUpdate();
    记忆中好像不应该用executeUpdate,或者你可以写个存储过程还原,然后代码里调用存储过程
      

  4.   

     String sql = "use master restore database ? from disk=? WITH REPLACE,RECOVERY";
      

  5.   


    HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: com.microsoft.sqlserver.jdbc.SQLServerException: RESTORE 无法处理数据库 'ZC_NmSoft',因为它正由此会话使用。建议在执行此操作时使用 master 数据库。
    org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    root cause com.microsoft.sqlserver.jdbc.SQLServerException: RESTORE 无法处理数据库 'ZC_NmSoft',因为它正由此会话使用。建议在执行此操作时使用 master 数据库。
    com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
    com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown Source)
    com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
    com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(Unknown Source)
    com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source)
    com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown Source)
    com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown Source)
    com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unknown Source)
    com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(Unknown Source)
    sqlbean.SqlBean.dateReduction(SqlBean.java:1952)
    com.yourcompany.struts.action.AdminAction.dbReduction(AdminAction.java:98)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
    org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    note The full stack trace of the root cause is available in the Apache Tomcat/6.0.26 logs.
    --------------------------------------------------------------------------------Apache Tomcat/6.0.26
      

  6.   

    String sql = "use master; restore database ? from disk=? WITH REPLACE,RECOVERY";
      

  7.   

    这个我也试过了 ,还是出现错误,HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: com.microsoft.sqlserver.jdbc.SQLServerException: 因为数据库正在使用,所以无法获得对数据库的独占访问权。
    org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    root cause com.microsoft.sqlserver.jdbc.SQLServerException: 因为数据库正在使用,所以无法获得对数据库的独占访问权。
    com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
    com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown Source)
    com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
    com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(Unknown Source)
    com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source)
    com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown Source)
    com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown Source)
    com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unknown Source)
    com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(Unknown Source)
    sqlbean.SqlBean.dateReduction(SqlBean.java:1955)
    com.yourcompany.struts.action.AdminAction.dbReduction(AdminAction.java:100)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
    org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    note The full stack trace of the root cause is available in the Apache Tomcat/6.0.26 logs.
    --------------------------------------------------------------------------------Apache Tomcat/6.0.26
      

  8.   

    http://topic.csdn.net/u/20100804/13/57d4a658-182b-4e28-ba01-fe4ab8dedcfa.html?26070