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 + -
显示快捷键?