sqlparser.java
来自「java版源代码,里面包含很多源代码,大家可以看看.」· Java 代码 · 共 760 行 · 第 1/2 页
JAVA
760 行
if (tmpBuffer.charAt(tmpBuffer.length() - 1) == '\'') tmpBuffer.append(getParameter(paramName.toString(), true, true)); else tmpBuffer.append(getParameter(paramName.toString(), true, false)); } else if (isSession) tmpBuffer.append(getSessionParameter(paramName.toString())); isPreBegin = false; isBegin = false; isSession = false; paramName.delete(0, paramName.length()); } else { tmpBuffer.append(SQLStatment.charAt(i)); isPreBegin = false; isBegin = false; isSession = false; } } return SingleQry(tmpBuffer.toString()); } /** *解析分页查询SQL[单条] * @param SQLStatment SQL语句 * @param Page 页数[page=-1 开始] * @param rowsPerPage 每页显示记录数 * @param TotalPage 总页码 * @param Action Action命令 * @return DBResult * @throws Exception */ private DBResult ParseQuery(String SQLStatment, int Page, int rowsPerPage, int TotalPage, String Action) throws Exception { StringBuffer tmpBuffer = new StringBuffer();//是否出现 [ boolean isPreBegin = false;//是否出现[_ boolean isBegin = false;//是否出现[! boolean isSession = false;//参数列表 HashMap param = new HashMap();//变量名称 StringBuffer paramName = new StringBuffer();//变量值 String paramValue = null; int nLength=SQLStatment.length(); for (int i = 0; i < nLength; i++) { if (!isBegin && !isSession && SQLStatment.charAt(i) == '[') isPreBegin = true; else if (isPreBegin && SQLStatment.charAt(i) == '_') { isBegin = true; isPreBegin = false; } else if (isPreBegin && SQLStatment.charAt(i) == '!') { isSession = true; isPreBegin = false; } else if (isPreBegin && SQLStatment.charAt(i) != '!' && SQLStatment.charAt(i) != '_') { tmpBuffer.append('['); tmpBuffer.append(SQLStatment.charAt(i)); isPreBegin = false; isBegin = false; isSession = false; } else if ( (isBegin || isSession) && SQLStatment.charAt(i) != ']') { paramName.append(SQLStatment.charAt(i)); } else if ( (isBegin || isSession) && SQLStatment.charAt(i) == ']') { if (isBegin) { if (tmpBuffer.charAt(tmpBuffer.length() - 1) == '\'') paramValue = getParameter(paramName.toString(), true, true); else paramValue = getParameter(paramName.toString(), true, false); } else if (isSession) paramValue = getSessionParameter(paramName.toString()); if (paramValue == null) paramValue = ""; tmpBuffer.append(paramValue); param.put(paramName.toString(), paramValue); paramName.delete(0, paramName.length()); isPreBegin = false; isBegin = false; isSession = false; } else { tmpBuffer.append(SQLStatment.charAt(i)); isPreBegin = false; isBegin = false; isSession = false; } } return QrySQL(tmpBuffer.toString(), param, Page, rowsPerPage, TotalPage, Action); } /** *解析单一SQL[多条] * @param SQLStatment SQL语句 * @throws Exception */ private void ParseMulti(String SQLStatment) throws Exception { StringBuffer tmpBuffer = new StringBuffer();//是否出现 [ boolean isPreBegin = false;//是否出现[_ boolean isBegin = false;//是否出现[! boolean isSession = false;//是否出现[-* boolean Begin = false;//记数 int Count = 0;//表单记录个数 int Length = 1;//表单重复次数 int MaxLength = 0;//是否是多记录自段 boolean isMulti = false;//变量名称 StringBuffer paramName = new StringBuffer(); for (; ; ) { isPreBegin = false; isBegin = false; Begin = false; isMulti = false; tmpBuffer.delete(0, tmpBuffer.length()); paramName.delete(0, paramName.length()); for (int i = 0; i < SQLStatment.length(); i++) { if (!isBegin && !isSession && SQLStatment.charAt(i) == '[') { isPreBegin = true; isMulti = false; } else if (isPreBegin && SQLStatment.charAt(i) == '_') { isBegin = true; isPreBegin = false; } else if (isPreBegin && SQLStatment.charAt(i) == '!') { isSession = true; isPreBegin = false; } else if (isBegin && SQLStatment.charAt(i) == '*') { Begin = true; isMulti = true; } else if (isPreBegin && SQLStatment.charAt(i) != '!' && SQLStatment.charAt(i) != '_') { tmpBuffer.append('['); tmpBuffer.append(SQLStatment.charAt(i)); isPreBegin = false; isBegin = false; isSession = false; Begin = false; } else if ( (Begin || isSession) && SQLStatment.charAt(i) != ']') { paramName.append(SQLStatment.charAt(i)); } else if ( (isBegin || isSession) && SQLStatment.charAt(i) != ']') { paramName.append(SQLStatment.charAt(i)); } else if ( (isBegin || isSession) && SQLStatment.charAt(i) == ']') { if (isSession) tmpBuffer.append(getSessionParameter(paramName.toString())); else if (isMulti) { if (getReqParams(paramName.toString()) == null) Length = 0; else { if (getReqParams(paramName.toString()).length > Length) { Length = getReqParams(paramName.toString()). length; MaxLength = MaxLength > Length ? MaxLength : Length; } else if (getReqParams(paramName.toString()).length == 1) { MaxLength = MaxLength > 1 ? MaxLength : 1; } } if (tmpBuffer.charAt(tmpBuffer.length() - 1) == '\'') tmpBuffer.append(getParameter(paramName.toString(), Count, false, true)); else tmpBuffer.append(getParameter(paramName.toString(), Count, false, false)); } else { if (tmpBuffer.charAt(tmpBuffer.length() - 1) == '\'') tmpBuffer.append(getParameter(paramName.toString(), false, true)); else tmpBuffer.append(getParameter(paramName.toString(), false, false)); } isMulti = false; isPreBegin = false; isBegin = false; Begin = false; isSession = false; paramName.delete(0, paramName.length()); } else { tmpBuffer.append(SQLStatment.charAt(i)); isPreBegin = false; isBegin = false; isSession = false; Begin = false; } } if (MaxLength > 0) SQL(tmpBuffer.toString()); Count++; if (Count >= MaxLength) break; } } /** * 从Request中取得参数值 * @param Name 参数名称 * @param isQuery 是否是查询 * @param isChar 是否是字符 * @return 参数值 * @throws Exception */ protected String getParameter(String Name, boolean isQuery, boolean isChar) throws Exception { StringBuffer ret = new StringBuffer(); String paramValue = getReqParam(Name); if (paramValue != null) { for (int i = 0; i < paramValue.length(); i++) { if (paramValue.charAt(i) == '\'') { ret.append("''"); } else ret.append(paramValue.charAt(i)); } } else { logWriter.Debug("参数" + Name + "为空"); if (isQuery || isChar) return ""; else return "null"; } if (paramValue.length() == 0 && (isQuery || isChar)) return ""; else if (paramValue.length() == 0 && (!isQuery && !isChar)) return "null"; //如果不是File Upload if (Properties.isConvert) { if (! (this instanceof com.trulytech.mantis.system.FileSQLParser)) return Properties.ConvertCharset(ret.toString()); else //如果国际化 if (com.trulytech.mantis.system.Properties.isInternational) return new String(ret.toString().getBytes("GBK"), "UTF-8"); else return ret.toString(); } else return ret.toString(); } /** * 从session中取得参数值 * @param Name 参数名称 * @return 参数值 * @throws Exception * @throws TimeoutException */ private String getSessionParameter(String Name) throws TimeoutException, Exception { HttpSession session = request.getSession(false); if (session == null) throw new TimeoutException("页面超时,请重新注册!"); String ret = (String) session.getAttribute(Name); if (ret == null) throw new TimeoutException("页面超时,请重新注册!"); else return ret; } /** * 从Request中取得参数值 [多记录] * @param Name 参数名称 * @param Count 记录数 * @param isQuery 是否是查询字句 * @param isChar 是否是字符类型 * @return 参数值 * @throws Exception */ protected String getParameter(String Name, int Count, boolean isQuery, boolean isChar) throws Exception { if (getReqParams(Name) == null) { logWriter.Debug("参数" + Name + "未定义"); if (isQuery || isChar) return ""; else return "null"; } StringBuffer ret = new StringBuffer(); String paramValue[] = getReqParams(Name); if (Count >= paramValue.length) throw new Exception("表单记录个数不相同"); if (paramValue[Count] != null) { for (int i = 0; i < paramValue[Count].length(); i++) { if (paramValue[Count].charAt(i) == '\'') { ret.append("''"); } else ret.append(paramValue[Count].charAt(i)); } } else { logWriter.Debug("参数" + Name + "为空"); if (isQuery || isChar) return ""; else return "null"; } if (paramValue[Count].length() == 0 && (isQuery || isChar)) return ""; else if (paramValue[Count].length() == 0 && !isQuery && !isChar) return "null"; //如果需要转换字符集 if (Properties.isConvert) { if (! (this instanceof com.trulytech.mantis.system.FileSQLParser)) return Properties.ConvertCharset(ret.toString()); else //如果是File Upload if (com.trulytech.mantis.system.Properties.isInternational) return new String(ret.toString().getBytes("GBK"), "UTF-8"); else return ret.toString(); } else return ret.toString(); } /** * 获得request中的参数值 * @param ParamValue String * @return String */ protected String getReqParam(String ParamValue) { return request.getParameter(ParamValue); } /** * 获得request中的参数值 * @param ParamValue String * @return String[] */ protected String[] getReqParams(String ParamValue) { return request.getParameterValues(ParamValue); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?