首先我执行这条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">
原数据库名称: <input type="text" name="dbname" value="ZC_NmSoft" size="25" readonly="readonly"> <br/>
数据库还原名称:<input type="text" name="dbpath" value="<%=dbdate1%>" size="25" onFocus="WdatePicker({isShowClear:false,readOnly:true})" > <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;
}
不知道大家能不能看明白 ,现在 点击还原 就会出错的。大家帮帮忙啊!在线等。
已为数据库 '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">
原数据库名称: <input type="text" name="dbname" value="ZC_NmSoft" size="25" readonly="readonly"> <br/>
数据库还原名称:<input type="text" name="dbpath" value="<%=dbdate1%>" size="25" onFocus="WdatePicker({isShowClear:false,readOnly:true})" > <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;
}
不知道大家能不能看明白 ,现在 点击还原 就会出错的。大家帮帮忙啊!在线等。
把这句打印出来看看 String sql = "restore database ? from disk=? WITH REPLACE,RECOVERY";
这是必须的
记忆中好像不应该用executeUpdate,或者你可以写个存储过程还原,然后代码里调用存储过程
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
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