Struts框架下实现从页面备份还原数据库

上传人:xia****ai 文档编号:107071422 上传时间:2022-06-14 格式:DOC 页数:17 大小:254KB
收藏 版权申诉 举报 下载
Struts框架下实现从页面备份还原数据库_第1页
第1页 / 共17页
Struts框架下实现从页面备份还原数据库_第2页
第2页 / 共17页
Struts框架下实现从页面备份还原数据库_第3页
第3页 / 共17页
资源描述:

《Struts框架下实现从页面备份还原数据库》由会员分享,可在线阅读,更多相关《Struts框架下实现从页面备份还原数据库(17页珍藏版)》请在装配图网上搜索。

1、Struts框架下实现从页面备份恢复数据库摘要:本文阐述了J2EE技术中在Structs框架下使用JSP页面对SQLServer数据库进行备份和恢复的方法和步骤,并通过实际应用证明了该方法的可行性和实用性。关键字:数据库备份 数据恢复 数据库还原 JSP页面 SQL Server数据库 页面备份恢复恢复数据作者单位:焦作市三维房地产开发有限公司正文:1 引言对于一个企业,尤其是信息化程度较高的企业来说,企业数据库的重要性不言而喻。数据库作为企业最有价值的财产,完整保存数据库数据尤为重要。备份数据库就是为了在发生意外时能够及时进行恢复,用以保证企业系统正常运行以及防止数据丢失或破坏。2 环境构建

2、本文阐述的是基于Struts1.2框架的数据库备份与恢复,环境构建有以下几点要求: 基于Struts1.2框架开发的Web软件。 SQLServer2005数据库 数据库连接使用纯JDBC连接 使用数据库连接池以上是Java企业级开发MVC开发模式的规范要求,对于小型和微型Web程序来说,也可以不使用连接池和Struts框架,直接在JSP页面中可以使用创建连接执行语句来实现,可以有选择地使用本文中的方法来实现数据库备份和恢复。3 方案和步骤3.1 创建数据库连接类在数据访问接口dao包内创建数据库连接类:import java.sql.Connection;import java.sql.Pr

3、eparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import javax.servlet.jsp.jstl.sql.ResultSupport;import javax.sql.DataSource;/*数据库连接类:DBConnection*/public class DBConnection /* * getConnection()方法:得到数据库连接 * return 数据库连接 */public static Connection getConnection() Connection conn

4、=null;try /使用连接池Context ctx = new InitialContext();DataSource ds = (DataSource) ctx.lookup(java:comp/env/jdbc/mydb);conn=ds.getConnection(); catch (Exception e) System.out.println(数据库连接失败!);e.printStackTrace();return conn;/* * closeAll()方法:释放资源 * param conn 数据库连接 * param pstmt PreparedStatement对象 *

5、param rs 结果集 */ public static void closeAll( Connection conn, PreparedStatement pstmt, ResultSet rs ) /* 如果rs不空,关闭rs */ if(rs != null) try rs.close(); catch (SQLException e) e.printStackTrace(); /* 如果pstmt不空,关闭pstmt */ if(pstmt != null) try pstmt.close(); catch (SQLException e) e.printStackTrace();

6、/* 如果conn不空,关闭conn */ if(conn != null) try conn.close(); catch (SQLException e) e.printStackTrace(); 3.2 创建文件操作类在软件通用类common包中添加文件操作类(用于查找、调用、删除备份文件):import java.io.BufferedReader;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.Input

7、StreamReader;import java.util.ArrayList;import java.util.List;/* * 文件操作类 * author YinZhiwei* */public class FileUtil /* * 查找文件是否存在 * param fileName(文件名,包含文件路径和扩展名) */public static boolean checkFile(String fileName)File file = new File(fileName);if(file.exists() & file.isFile()return true;return fals

8、e;/* * 获取文件扩展名 * param fileName * return string文件扩展名 */public static String getExtendName(String fileName)int index = fileName.lastIndexOf(.);if(index!=-1)return fileName.substring(index+1);return null;/* * 获得文件列表 * param path * param filterName * return list */public static List getFileList(String

9、path,List filterName)File file = new File(path);List list = new ArrayList();String fileList = file.list();/按名称排序(降序)for(int i=fileList.length-1;i=0;i-)String extendName = getExtendName(fileListi);if(filterName.contains(extendName)list.add(fileListi);return list;/* 删除文件,可以是文件或文件夹* param fileName 要删除的

10、文件名* return 删除成功返回true,否则返回false*/public static boolean delete(String fileName) File file = new File(fileName);if(!file.exists() return false; else if(file.isFile() return deleteFile(fileName);else return deleteDirectory(fileName);/* 删除单个文件* param fileName 要删除的文件的文件名* return 单个文件删除成功返回true,否则返回false

11、*/public static boolean deleteFile(String fileName) File file = new File(fileName);if(file.exists() & file.isFile() if(file.delete() return true; else return false; else return false;/* 删除目录及目录下的文件* param dir 要删除的目录的文件路径* return 目录删除成功返回true,否则返回false*/public static boolean deleteDirectory(String di

12、r) / 如果dir不以文件分隔符结尾,自动添加文件分隔符if(!dir.endsWith(File.separator)dir = dir + File.separator;File dirFile = new File(dir);if(!dirFile.exists() | (!dirFile.isDirectory() return false;boolean flag = true;/ 删除文件夹中的所有文件包括子目录File files = dirFile.listFiles();for(int i = 0; i files.length; i+) / 删除子文件if(filesi.

13、isFile() flag = FileUtil.deleteFile(filesi.getAbsolutePath();if(!flag) break;/ 删除子目录else if(filesi.isDirectory() flag = FileUtil.deleteDirectory(filesi.getAbsolutePath();/递归调用if(!flag) break;if(!flag) return false;/删除当前目录if(dirFile.delete() return true; else return false;3.3 数据库操作访问类在数据访问类dao.impl包内

14、创建数据库操作访问类:/* * 数据库操作数据访问类 * author YinZhiwei*/public class OperateDbDaoImpl implements IOperateDbDao private Connection conn;/数据库连接对象/* * 备份数据库 * return result(0失败,1成功) * author YinZhiwei */public int backupDb(String dbName,String storePath)int result = 0;conn = DBConnection.getConnection();/获取连接St

15、ring sql = use master backup database ? to disk=?;/注:storePath为备份文件的路径加文件名,如D:databasemydb20110304.bakString param =dbName,storePath; PreparedStatement ps=null; try ps= conn.prepareStatement(sql); if( param != null ) for( int i = 0; i param.length; i+ ) ps.setString(i+1, parami); / 为预编译SQL设置参数 ps.ex

16、ecuteUpdate(); / 执行SQL语句 result = 1; catch (SQLException e) e.printStackTrace();result = 0; finally / 释放资源try ps.close();conn.close(); catch (SQLException e) e.printStackTrace(); return result;/* * 还原数据库 * return result(0失败,1成功) * author YinZhiwei */public int restoreDb(String dbName,String bakPath)

17、int result = 0;conn = DBConnection.getConnection();/获取连接String sql = use master restore database ? from disk=? with replace;/注:bakPath为备份文件的路径加文件名,如D:databasemydb20110304.bakString param =dbName,bakPath; PreparedStatement ps=null; try ps= conn.prepareStatement(sql); if( param != null ) for( int i =

18、0; i param.length; i+ ) ps.setString(i+1, parami); / 为预编译SQL设置参数 ps.executeUpdate(); / 执行SQL语句 result = 1; catch (SQLException e) e.printStackTrace();result = 0; finally / 释放资源try ps.close();conn.close(); catch (SQLException e) e.printStackTrace(); return result;3.4 创建backup.jsp页面加载数据库备份页面访问”./opera

19、teDb/toBackup.do”进入backup.jsp页面以备份数据库% request.setCharacterEncoding(GBK); String msg = ;/消息 if(request.getAttribute(msg)!=null) /有消息 response.setCharacterEncoding(GBK); msg = (String)request.getAttribute(msg); request.setAttribute(msg,null);/清空 if(!msg.equals() response.getWriter().println(alert(+ms

20、g+!);); % 备份数据库 数据库管理→备份数据库 备份数据库 数据库名:mydb   备份日期:$date 注:今日已经备份过数据库!    /备份function checkSubmit() var has = document.getElementById(hidHasFile).value; if(has = 1) if(!confirm(今日已经备份过数据库,要重新备份吗?) return; if(confirm(确定备份数据库?)document.form1.action += /doBackup.do;documen

21、t.form1.submit(); 3.5 创建restore.jsp页面进行数据库恢复访问”./operateDb/toRestore.do”进入restore.jsp页面加载备份文件以备恢复数据库使用。 % request.setCharacterEncoding(GBK); String msg = ;/消息 if(request.getAttribute(msg)!=null) /有消息 response.setCharacterEncoding(GBK); msg = (String)request.getAttribute(msg); request.setAttribute(ms

22、g,null);/清空 if(!msg.equals() response.getWriter().println(alert(+msg+!);); % 还原数据库 数据库管理→还原数据库 $nodb 数据库名 备份日期 $db   /还原function checkSubmit() if(confirm(确定还原数据库?nrnr注意:还原后将覆盖现有数据,请做好备份!)document.form1.action+= /doRestore.do;document.form1.submit(); 3.6 创建数据库操作Action并在struts-config.xm

23、l中配置在web.action包内创建数据库操作的Action:/* * 数据库操作Action* struts.action validate=true * author YinZhiwei */public class OperateDbAction extends MappingDispatchAction private IOperateDbBiz operateDbBiz = new OperateDbBizImpl();/实例化数据库操作接口/* * toBackup方法 * 加载备份数据库界面 */public ActionForward toBackup(ActionMappi

24、ng mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) /备份名以日期来定义,先检查今天是否有备份,如果有的话提示已经备份过了,如果需要重新备份则删除原来的备份后重新备份String path = request.getSession().getServletContext().getRealPath(/)+bakup/;String dbName = mydb;String date = TimeManager.getDate2();String bakName = path+

25、dbName+date+.bak;if(FileUtil.checkFile(bakName)request.setAttribute(hasFile, 1);request.setAttribute(date, date);elserequest.setAttribute(hasFile, 0);request.setAttribute(date, date);return mapping.findForward(backup);/* * doBackup方法 * 备份数据库 */public ActionForward doBackup(ActionMapping mapping, Act

26、ionForm form,HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException String path = request.getSession().getServletContext().getRealPath(/)+bakup/;String dbName = mydb;/获取当前日期(格式yyyy-MM-dd)String date = TimeManager.getDate2();String bakName = path+dbName+date+.b

27、ak;boolean flag = true;if(FileUtil.checkFile(bakName)/删除原有备份flag = FileUtil.deleteFile(bakName);if(flag)/新备份if(operateDbBiz.backupDb(dbName, bakName)=1)request.setAttribute(msg, 数据库备份成功!);elserequest.setAttribute(msg, 数据库备份失败!);request.getRequestDispatcher(./operateDb/toBackup.do).forward(request, r

28、esponse);return null;/* * toRestore方法 * 加载还原数据库界面 */public ActionForward toRestore(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) /读取备份文件夹里面的备份信息,获取该数据库的备份文件名,封装后展示在页面上供用户选择/数据库名称String dbName = mydb;request.setAttribute(dbName, dbName);/数据库备份存放路径Str

29、ing path = request.getSession().getServletContext().getRealPath(/)+bakup;/暂时将备份存放bakup文件夹中/设置过滤器List filterName = new ArrayList();filterName.add(bak);List list = FileUtil.getFileList(path, filterName);if(list=null | list.size()=0)request.setAttribute(nodb, 没有找到数据库备份文件!);else/去掉list里面的扩展名和数据库名int dbL

30、ength = dbName.length();for(int j=0;jlist.size();j+)String temp = list.get(j);list.set(j, (temp.substring(dbLength,temp.length()-4);/保存到request中request.setAttribute(list, list);return mapping.findForward(restore);/* * doRestore方法 * 还原数据库 * throws IOException * throws ServletException */public Action

31、Forward doRestore(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException /获取参数String dbName = request.getParameter(txtDbName);/数据库名(针对一个使用单一数据库的程序来说可以写成固定值)String bakTime = request.getParameter(txtTime); /备份的名称中的时间String

32、path = request.getSession().getServletContext().getRealPath(/)+bakup/;String bakPath = path+dbName+bakTime+.bak;if(operateDbBiz.restoreDb(dbName, bakPath)=1)request.setAttribute(msg, 数据库还原成功!);elserequest.setAttribute(msg, 数据库还原失败!);request.getRequestDispatcher(./operateDb/toRestore.do).forward(request, response);return null;在struts-config.xml文件中添加配置信息: 4 运行效果简图图4-1:进入备份页面,当日没有进行备份,提示出数据库名和备份时间图4-2:提交备份请求图4-3:备份成功图4-4:当日已经进行过备份,给予提示图4-5:恢复数据库页面,列出已经存在的备份供选择,默认为最近一次的备份。图4-6:提交恢复数据库请求图4-7:数据库恢复成功

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!