📄 databasemanageaction.java
字号:
}
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 + -