⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 databasemanageaction.java

📁 论坛软件系统亦称电子公告板(BBS)系统
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
						}
						String confirm = request.getParameter("confirm");
						if (confirm == null&& dumpinfo != null&& !dumpinfo.get("jsprunversion").equals(JspRunConfig.version)) {
							request.setAttribute("confirmInfo","导入和当前 JspRun! 版本不一致的数据极有可能产生无法解决的故障,您确定继续吗?");
							request.setAttribute("commitPath",request.getContextPath()+ "/database.do?action=importZipFile&from=server&datafile_server="+ datafile_server+ "&importsubmit=yes&confirm=yes");
							return mapping.findForward("confirm");
						}
						String info = "";
						if (dumpinfo != null) {
							info = datafile_server.substring(datafile_server.lastIndexOf("/") + 1)+ "<br/>版本: "+ dumpinfo.get("jsprunversion")+ "<br/>类型: "+ (dumpinfo.get("type").equals("jsprun") ? "论坛全部数据": "自定义备份")+ "<br/>方式: "+ (dumpinfo.get("method").equals("multivol") ? "多卷": "Shell") + "<br/><br/>";
						}
						int index1 = datafile_server.lastIndexOf("-");
						int index2 = datafile_server.lastIndexOf("/");
						StringBuffer datafile_next = new StringBuffer(datafile_server);
						String volume = null;
						if (index1 > index2) {
							volume = datafile_server.substring(datafile_server.lastIndexOf("-") + 1, datafile_server.lastIndexOf("."));
							datafile_next = datafile_next.replace(datafile_next.lastIndexOf("-") + 1,datafile_next.lastIndexOf("."),String.valueOf(Integer.valueOf(datafile_next.substring(datafile_next.lastIndexOf("-") + 1,datafile_next.lastIndexOf("."))) + 1));
						}
						if (volume == null || !"1".equals(volume)) {
							String fileName = path + "/" + fileNames.get(0);
							request.setAttribute("confirmInfo", info+ "备份文件解压缩完毕,您需要自动导入备份吗?导入后解压缩的文件将会被删除。");
							request.setAttribute("commitPath",request.getContextPath()	+ "/database.do?action=importFile&from=server&datafile_server="+ fileName+ "&importsubmit=yes&delunzip=yes");
							return mapping.findForward("confirm");
						} else if ("1".equals(volume)) {
							request.setAttribute("confirmInfo", info+ "备份文件解压缩完毕,您需要自动解压缩其它的分卷文件吗?");
							request.setAttribute("commitPath",request.getContextPath()+ "/database.do?action=importZipFile&datafile_server="+ datafile_next.toString()+ "&autoimport=yes&importsubmit=yes&delunzip=yes");
							return mapping.findForward("confirm");
						} else if (autoimport != null) {
							request.setAttribute("successInfo", "数据文件 #"+ volume + " 成功解压缩,程序将自动继续。");
							request.setAttribute("requestPath",request.getContextPath()+ "/database.do?action=importZipFile&datafile_server="+ datafile_next.toString()+ "&autoimport=yes&importsubmit=yes&delunzip=yes");
							return mapping.findForward("success");
						}
					} else {
						request.setAttribute("resultInfo","数据文件不存在: 可能服务器不允许上传文件或尺寸超过限制。");
						return mapping.findForward("result");
					}
				} else {
					if (autoimport != null) {
						int index1 = datafile_server.lastIndexOf("-");
						int index2 = datafile_server.lastIndexOf("/");
						StringBuffer datafile = new StringBuffer(datafile_server);
						if (index1 > index2) {
							datafile = datafile.replace(datafile.lastIndexOf("-") + 1, datafile.lastIndexOf("."), "1");
						}
						datafile.replace(datafile.lastIndexOf("."), datafile.length(), ".sql");
						request.setAttribute("confirmInfo","所有分卷文件解压缩完毕,您需要自动导入备份吗?导入后解压缩的文件将会被删除。");
						request.setAttribute("commitPath",request.getContextPath()+ "/database.do?action=importFile&from=server&datafile_server="+ datafile.toString()+ "&importsubmit=yes&delunzip=yes");
						return mapping.findForward("confirm");
					} else {
						request.setAttribute("resultInfo","数据文件不存在: 可能服务器不允许上传文件或尺寸超过限制。");
						return mapping.findForward("result");
					}
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return this.toImport(mapping, form, request, response);
	}
	private String createBackupdir(String realPath,String oldbackupdir) {
		String backupdir = null;
		if (oldbackupdir != null) {
			backupdir = "./forumdata/backup_"+oldbackupdir;
		}
		if (backupdir==null||!new File(realPath + backupdir).isDirectory()) {
			String randStr = Common.getRandStr(6, false);
			backupdir = "./forumdata/backup_" + randStr;
			try {
				if (new File(realPath + backupdir).mkdir()) {
					dataBaseService.runQuery("REPLACE INTO jrun_settings (variable, value) values ('backupdir', '"+randStr+"')");
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return backupdir;
	}

	public ActionForward runquery(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {
		String sqlsubmit=request.getParameter("sqlsubmit");
		if(sqlsubmit==null){
			Map<Integer, Map<Integer, String>> simplequeries = new TreeMap<Integer, Map<Integer, String>>();
			Map<Integer, String> upSimplequeries = new TreeMap<Integer, String>();
			NodeList nl = this.getSimplequerie();
			if (nl != null) {
				for (int i = 0; i < nl.getLength(); i++) {
					Element element = (Element) nl.item(i);
					int id = Integer.parseInt(element.getAttribute("id"));
					int uid = Integer.parseInt(element.getAttribute("uid"));
					String comment = element.getAttribute("comment");
					if (0 == uid) {
						simplequeries.put(id, new TreeMap<Integer, String>());
						upSimplequeries.put(id, comment);
					} else {
						Map<Integer, String> map = simplequeries.get(uid);
						if (map == null) {
							map = new TreeMap<Integer, String>();
						}
						map.put(id, comment);
						simplequeries.put(uid, map);
					}
				}
			}
			request.setAttribute("simplequeries", simplequeries);
			request.setAttribute("upSimplequeries", upSimplequeries);
			return mapping.findForward("toRunquery");
		}else{
			String option = request.getParameter("option");
			String sql = null;
			if (option != null && "simple".equals(option)) {
				String queryselect = request.getParameter("queryselect");
				if (queryselect != null && !"".equals(queryselect)) {
					NodeList nl = this.getSimplequerie();
					if (nl != null) {
						for (int i = 0; i < nl.getLength(); i++) {
							Element element = (Element) nl.item(i);
							String id = element.getAttribute("id");
							if (id.equals(queryselect)) {
								StringBuffer sb = new StringBuffer(element.getAttribute("sql"));
								sb.replace(sb.indexOf("{"),sb.lastIndexOf("}") + 1, "jrun_");
								sql = sb.toString();
							}
						}
					}
				}
			} else {
				sql = request.getParameter("queries");
			}
			Map<String, String> map=null;
			if(sql!=null&&!"".equals(sql)){
				map = dataBaseService.runQuery(sql);
			}
			String num =null;
			if(map!=null){
				num = map.get("ok");
			}else{
				num="0";
			}
			if (num != null) {
				request.setAttribute("errorInfo", "JspRun! 数据结构成功升级,影响的记录行数 " + num + ",请返回。");
			} else {
				request.setAttribute("errorInfo", "升级错误,MySQL 提示: " + map.get("error") + ",请返回。");
			}
			return mapping.findForward("error");
		}
	}

	public ActionForward optimize(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		String optimizesubmit=request.getParameter("optimizesubmit");
		long totalsize = 0;
		List<TableStatusVO> tableStatusVOs =null;
		if(optimizesubmit==null){
			tableStatusVOs = dataBaseService.findTableStatus("SHOW TABLE STATUS LIKE 'jrun_%';");
			for (TableStatusVO statusVO : tableStatusVOs) {
				if (statusVO.getData_free() > 0) {
					totalsize += statusVO.getData_length()+ statusVO.getIndex_length();
				}
			}
		}else{
			String[] optimizetables = request.getParameterValues("optimizetables");
			if (optimizetables != null) {
				for (String obj : optimizetables) {
					dataBaseService.runQuery("OPTIMIZE TABLE " + obj,true);
				}
			}
			tableStatusVOs = dataBaseService.findTableStatus("SHOW TABLE STATUS LIKE 'jrun_%';");
			for (TableStatusVO statusVO : tableStatusVOs) {
				totalsize += statusVO.getData_length() + statusVO.getIndex_length();
			}
			request.setAttribute("type", "optimize");
		}
		request.setAttribute("tableStatusVOs", tableStatusVOs);
		request.setAttribute("totalsize", sizeFormat(totalsize));
		return mapping.findForward("toOptimize");
	}

	@SuppressWarnings("unchecked")
	public ActionForward toDbcheck(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {
		List<FieldVO> fieldVOs = dataBaseService.findTableFields("jrun_settings");
		if (fieldVOs == null || fieldVOs.size() <= 0) {
			request.setAttribute("info", "yes");
			request.setAttribute("dbcheck_permissions_invalid","您的服务器环境不允许执行数据库校验,无法进行此操作。");
			return mapping.findForward("toDbcheck");
		}
		if (!"yes".equals(request.getParameter("start"))) {
			request.setAttribute("info", "yes");
			request.setAttribute("dbcheck_checking", "admincp.jsp?action=moddbcheck&start=yes");
			return mapping.findForward("toDbcheck");
		}
		String realPath = servlet.getServletContext().getRealPath("/");
		File file = new File(realPath + "admin/jsprundb.md5");
		if (!file.exists()) {
			request.setAttribute("info", "yes");
			request.setAttribute("dbcheck_nofound_md5file", "不存在校验文件,无法进行此操作。");
			return mapping.findForward("toDbcheck");
		} else {
			HttpSession session = request.getSession();
			String dbmd5 = null;
			String newdbmd5 = null;
			Map jsprundb = (Map) session.getAttribute("jsprundb");
			if (jsprundb == null) {
				StringBuffer jsprunContent = new StringBuffer();
				FileReader fr=null;
				BufferedReader br = null;
				try {
					fr=new FileReader(file);
					br = new BufferedReader(fr);
					do{
						jsprunContent.append(br.readLine());
					}while (br.ready());
				} catch (Exception e) {
					e.printStackTrace();
				} finally {
					try {
						br.close();
						fr.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				dbmd5 = jsprunContent.substring(0, 32);
				newdbmd5 = Md5Token.getInstance().getLongToken(String.valueOf(jsprunContent.substring(34).length()));
				jsprundb = dataParse.characterParse(jsprunContent.substring(34),false);
				session.setAttribute("dbmd5", dbmd5);
				session.setAttribute("newdbmd5", newdbmd5);
				session.setAttribute("jsprundb", jsprundb);
			}
			dbmd5 = session.getAttribute("dbmd5").toString();
			newdbmd5 = session.getAttribute("newdbmd5").toString();
			if (!dbmd5.equals(newdbmd5)) {
				request.setAttribute("info", "yes");
				request.setAttribute("dbcheck_modify_md5file","校验文件被修改,无法进行此操作。");
			}
			Map<Integer, String> settingsdata = (Map<Integer, String>) jsprundb.get(1);
			jsprundb = (Map)((Map) jsprundb.get(0)).get(0);
			List<Map<String,String>> settings=dataBaseService.executeQuery("SELECT variable FROM jrun_settings WHERE SUBSTRING(variable, 1, 9)<>'jswizard_' ORDER BY variable");
			List<String> settingsdatanew = new ArrayList<String>();
			if (settings != null) {
				for (Map<String,String> setting : settings) {
					settingsdatanew.add(setting.get("variable"));
				}
			}
			StringBuffer settingsdeldata=new StringBuffer(); 
			if (settingsdata != null) {
				Set<Integer> key = settingsdata.keySet();
				for (Integer obj : key) {
					String variable = settingsdata.get(obj);
					if (!settingsdatanew.contains(variable)) {
						settingsdeldata.append(","+variable);
					}
				}
			}
			request.setAttribute("settingsdeldata",settingsdeldata.length() > 0 ? settingsdeldata.substring(1) :null);
			Config config = new Config(realPath + "/config.properties");
			String version=config.getValue("version");
			StringBuffer charseterrors =new StringBuffer();
			if (version.compareTo("4.1") > 0) {
				String dbcharset = config.getValue("dbcharset");
				if (dbcharset == null || dbcharset.equals("")) {
					dbcharset=JspRunConfig.charset.replaceAll("-", "");
				}
				dbcharset = dbcharset.toUpperCase();
				List<TableStatusVO> tableStatusVOs = dataBaseService.findTableStatus("SHOW TABLE STATUS LIKE 'jrun_%';");
				for (TableStatusVO statusVO : tableStatusVOs) {
					String tabledbcharset = statusVO.getCollation().substring(0, statusVO.getCollation().indexOf("_"));
					if (!dbcharset.equals(tabledbcharset.toUpperCase())) {
						charseterrors.append("<span style='float: left; width: 33%'>"+statusVO.getName() + "(" + tabledbcharset+ ")</span>");
					}
				}
				request.setAttribute("dbcharset", dbcharset);
				request.setAttribute("charseterrors",charseterrors.length()> 0 ? charseterrors.toString() : null);
			}
			boolean installexists=new File(realPath+"install/jsprun.sql").exists();
			List<String> tablenew = dataBaseService.findAllTableNames("jrun_");
			StringBuffer missingtables = new StringBuffer();
			Map<String, List<FieldVO>> addsMap = new TreeMap<String, List<FieldVO>>();
			Map<String, List<FieldVO>> modifysMap = new TreeMap<String, List<FieldVO>>();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -