📄 databasemanageaction.java
字号:
Map<String, List<String>> delsMap = new TreeMap<String, List<String>>();
if (jsprundb != null) {
Set<String> key = jsprundb.keySet();
for (String obj : key) {
String tableName = "jrun_" + obj;
if (tablenew.contains(tableName)) {
List<FieldVO> fieldsnew = dataBaseService.findTableFields(tableName);
Map<String, Map<String, String>> jsprunfields = (Map<String, Map<String, String>>) jsprundb.get(obj);
Set<String> jsprunfieldNames = jsprunfields.keySet();
if (jsprunfieldNames != null) {
for (String fieldName : jsprunfieldNames) {
boolean flag = false;
if (fieldsnew != null) {
for (FieldVO fieldVO : fieldsnew) {
if (fieldName.equals(fieldVO.getField())) {
flag = true;
break;
}
}
}
if (!flag) {
List<String> fieldlists = delsMap.get(obj);
if (fieldlists == null) {
fieldlists = new ArrayList<String>();
}
fieldlists.add(fieldName);
delsMap.put(obj, fieldlists);
}
}
}
if (fieldsnew != null) {
for (FieldVO fieldVO : fieldsnew) {
if (fieldVO.getAllowNull() == null|| fieldVO.getAllowNull().equals("")) {
fieldVO.setAllowNull("NO");
}
if (fieldVO.getDefaultValue() == null|| fieldVO.getDefaultValue().equals("0")|| fieldVO.getDefaultValue().equals("0.00")) {
fieldVO.setDefaultValue("");
}
List<FieldVO> fieldlists = null;
if (jsprunfieldNames != null&& jsprunfieldNames.contains(fieldVO.getField())) {
Map<String, String> jsprunfield = jsprunfields.get(fieldVO.getField());
if (version.compareTo("4.1") < 0&& tableName == "sessions"&& fieldVO.getField() == "sid") {
fieldVO.setType(fieldVO.getType().replaceAll(" binary", ""));
}
if (!jsprunfield.get("Type").equals(fieldVO.getType())|| !jsprunfield.get("Null").equals(fieldVO.getAllowNull())|| !jsprunfield.get("Extra").equals(fieldVO.getExtra())|| !jsprunfield.get("Default").equals(fieldVO.getDefaultValue())) {
fieldlists = modifysMap.get(obj);
if (fieldlists == null) {
fieldlists = new ArrayList<FieldVO>();
}
fieldlists.add(fieldVO);
modifysMap.put(obj, fieldlists);
}
} else {
fieldlists = addsMap.get(obj);
if (fieldlists == null) {
fieldlists = new ArrayList<FieldVO>();
}
fieldlists.add(fieldVO);
addsMap.put(obj, fieldlists);
}
}
}
} else {
missingtables.append("<span style='float:left;width:33%'>"+((installexists ? "<input name='missingtable' type='checkbox' class='checkbox' value='"+obj+"'>" : "")+tableName)+"</span>");
}
}
}
request.setAttribute("tablepre", "jrun_");
request.setAttribute("jsprundb", jsprundb);
request.setAttribute("missingtables",missingtables.length() > 0 ? missingtables.toString() : null);
request.setAttribute("addsMap", addsMap.size() > 0 ? addsMap : "");
session.setAttribute("modifysMap", modifysMap);
session.setAttribute("delsMap", delsMap);
request.setAttribute("hasErrorField", modifysMap.size() > 0 || delsMap.size() > 0 ? true : false);
if (charseterrors.length() == 0 && missingtables.length() == 0&& addsMap.size() == 0 && modifysMap.size() == 0&& delsMap.size() == 0 && settingsdeldata.length() == 0) {
request.setAttribute("info", "yes");
request.setAttribute("dbcheck_ok", "您的数据库完整无误。");
return mapping.findForward("toDbcheck");
}
return mapping.findForward("toDbcheck");
}
}
@SuppressWarnings("unchecked")
public ActionForward dbcheck(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {
String[] repair = request.getParameterValues("repair");
String[] repairtable = request.getParameterValues("repairtable");
String[] missingtable = request.getParameterValues("missingtable");
String settingsdel = request.getParameter("setting[del]");
if (repair == null && repairtable == null && missingtable == null&& !"1".equals(settingsdel)) {
return this.toDbcheck(mapping, form, request, response);
}
StringBuffer errors=new StringBuffer();
HttpSession session = request.getSession();
Map jsprundb = (Map) session.getAttribute("jsprundb");
Map<Integer, String> settingsdata = (Map<Integer, String>) jsprundb.get(1);
jsprundb = (Map) ((Map) jsprundb.get(0)).get(0);
if (repairtable != null) {
for (String tableName : repairtable) {
Map<String, List<FieldVO>> modifysMap = (Map<String, List<FieldVO>>) session.getAttribute("modifysMap");
Map<String, List<String>> delsMap = (Map<String, List<String>>) session.getAttribute("delsMap");
List<FieldVO> fieldVO = modifysMap.get(tableName);
if (fieldVO != null) {
for (FieldVO obj : fieldVO) {
Map<String, String> field = (Map) ((Map) jsprundb.get(tableName)).get(obj.getField());
String error = dataBaseService.runQuery("ALTER TABLE jrun_"+ tableName+ " MODIFY COLUMN "+ field.get("Field")+ " "+ field.get("Type")+ " "+ (field.get("Null").equals("NO") ? "NOT NULL": "") + " " + field.get("Extra") + " "+((field.get("Null").equals("")&& field.get("Default").equals("")|| this.getStr(field.get("Type"), "text").size() == 0 || this.getStr(field.get("Extra"), "auto_increment").size() == 0) ? "": "DEFAULT '" + field.get("Default") + "';")).get("error");
if (error != null) {
errors.append("<br /><br />" + error);
}
}
}
List<String> fieldNames = delsMap.get(tableName);
if (fieldNames != null) {
for (String fieldName : fieldNames) {
Map<String, String> field = (Map) ((Map) jsprundb.get(tableName)).get(fieldName);
String error = dataBaseService.runQuery("ALTER TABLE jrun_"+ tableName+ " ADD COLUMN "+ field.get("Field")+ " "+ field.get("Type")+ " "+ (field.get("Null").equals("NO") ? "NOT NULL": "") + " " + field.get("Extra") + " "+((field.get("Null").equals("")&& field.get("Default").equals("")|| this.getStr(field.get("Type"), "text").size() == 0 || this.getStr(field.get("Extra"), "auto_increment").size() == 0) ? "": "DEFAULT '" + field.get("Default") + "';")).get("error");
if (error != null) {
errors.append("<br /><br />" + error);
}
}
}
}
}
if (repair != null) {
for (String str : repair) {
String[] fieldInfo = str.split("\\|");
String tableName = fieldInfo[0];
String fieldName = fieldInfo[1];
String type = fieldInfo[2];
Map<String, String> field = (Map) ((Map) jsprundb.get(tableName)).get(fieldName);
String error = dataBaseService.runQuery("ALTER TABLE jrun_" + tableName + " "+ (type.equals("add") ? "ADD COLUMN" : "MODIFY COLUMN")+ " " + field.get("Field") + " " + field.get("Type")+ " "+ (field.get("Null").equals("NO") ? "NOT NULL" : "")+ " " + field.get("Extra") + " "+((field.get("Null").equals("")&& field.get("Default").equals("")|| this.getStr(field.get("Type"), "text").size() == 0 || this.getStr(field.get("Extra"), "auto_increment").size() == 0) ? "": "DEFAULT '" + field.get("Default") + "';")).get("error");
if (error != null) {
errors.append("<br /><br />" + error);
}
}
}
if (missingtable != null) {
StringBuffer jsprunContent = (StringBuffer) session.getAttribute("jsprunContent");
if (jsprunContent == null) {
String realPath = servlet.getServletContext().getRealPath("/");
File file = new File(realPath + "./install/jsprun.sql");
FileReader fr=null;
BufferedReader br = null;
try {
jsprunContent = new StringBuffer();
fr=new FileReader(file);
br = new BufferedReader(fr);
String line = br.readLine();
while (line != null) {
jsprunContent.append(line);
line = br.readLine();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
br.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
session.setAttribute("jsprunContent", jsprunContent);
}
for (String tableName : missingtable) {
List<String> strs = this.getStr(jsprunContent.toString(), "CREATE TABLE jrun_" + tableName + "\\s\\(.+?;");
if (strs != null && strs.size() > 0) {
String error = dataBaseService.runQuery(strs.get(0)).get("error");
if (error != null) {
errors.append("<br /><br />" + error);
}
}
}
}
if ("1".equals(settingsdel)) {
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"));
}
}
if (settingsdata != null) {
Set<Integer> key = settingsdata.keySet();
for (Integer obj : key) {
String variable = settingsdata.get(obj).trim();
if (!settingsdatanew.contains(variable)) {
String error = dataBaseService.runQuery( "insert into jrun_settings (variable, value) values('"+ variable + "','')").get("error");
if (error != null) {
errors.append("<br /><br />" + error);
}
}
}
}
}
request.setAttribute("info", "yes");
if (errors.length()>0) {
request.setAttribute("dbcheck_repair_error", errors.toString());
} else {
request.setAttribute("dbcheck_repair_completed", "admincp.jsp?action=moddbcheck");
}
return mapping.findForward("toDbcheck");
}
private Map<String,String> getValues(String variables){
List<Map<String,String>> objs=dataBaseService.executeQuery("SELECT * FROM jrun_settings WHERE variable IN ("+variables+")");
Map<String,String> values=null;
if(objs!=null&&objs.size()>0){
values=new HashMap<String,String>();
for(Map<String,String> obj:objs){
String variable= obj.get("variable");
String value=obj.get("value");
if(variable!=null){
values.put(variable, value);
}
}
}
return values;
}
private List<String> getStr(String content, String regex) {
List<String> strList = new ArrayList<String>();
PatternCompiler compiler = new Perl5Compiler();
Pattern pattern = null;
try {
pattern = compiler.compile(regex);
} catch (MalformedPatternException e) {
e.printStackTrace();
}
PatternMatcher m = new Perl5Matcher();
if (m.contains(content, pattern)) {
MatchResult result = m.getMatch();
for (int i = 0; i < result.groups(); i++) {
strList.add(result.group(i));
}
}
return strList;
}
@SuppressWarnings("finally")
private NodeList getSimplequerie() {
String realPath = servlet.getServletContext().getRealPath("/");
String simplequerie = realPath+ "./admin/page/counter/quickqueries.xml";
File file = new File(simplequerie);
NodeList nl = null;
try {
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file);
nl = document.getElementsByTagName("simplequerie");
} catch (Exception e) {
e.printStackTrace();
} finally {
return nl;
}
}
private String sizeFormat(Long size) {
double dataSize = size;
if (dataSize == 0) {
return "";
}
String type = "Bytes";
if (dataSize > 1024) {
dataSize /= 1024;
type = "KB";
}
if (dataSize > 1024) {
dataSize /= 1024;
type = "MB";
}
if (dataSize > 1024) {
dataSize /= 1024;
type = "GB";
}
if (dataSize > 1024) {
dataSize /= 1024;
type = "TB";
}
dataSize = (double) Math.round(dataSize * 100) / 100;
return dataSize + " " + type;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -