源码分析所得 char 与 int之间的转换

版权声明:https://blog.csdn.net/haochaoguo1988 https://blog.csdn.net/haochaoguo1988/article/details/83659617

 公司用的是 hibernate 做数据库查询,其中 jar 包是这些。

在翻阅源码的时候有些问题不得解。在不懈努力下,以及前辈大神的指导下终于明白了。

String biz_stage = "007";
StringBuilder sql1 = new StringBuilder();
sql1.append(" SELECT C.TASK_HANDLER,C.STATUS FROM C_CLAIM_TASKS C WHERE C.CASENO = ? AND C.BIZ_STAGE = ?");
List<Map<String, Object>> list = databaseDao.findAllBySqlMap(sql1.toString(), caseNo, biz_stage);
InjectionCheckUtils.checkValidSql(sql);
final String fnSql = processQL(sql, values);

 上面是重要代码(我有疑问的,以及大家阅读懂所必须的)。

SQL 正则校验(这块我弱项,没懂),然后就是 SQL 分析:

protected static String processQL(final String ql, final Object... values) {
    String newQL = ql;
    int pos = 0;
    for (int i = 0; i < values.length; ++i) {
        pos = newQL.indexOf(63, pos);
        if (pos == -1) {
            throw new IllegalArgumentException("params and values must match.");
        }
        if (values[i] instanceof Collection) {
            newQL = String.valueOf(newQL.substring(0, pos)) + ":" + "queryParam" + i + newQL.substring(pos + 1);
        }
        ++pos;
    }
    return newQL;
}

 疑惑一:

 pos = newQL.indexOf(63, pos);

    为啥要定义 int 类型的数值 63 传进去。而且返回的值正好是  ‘?’  所在的位置。

疑惑一续: 这个怎么会这样返回

if (value[i] == ch) {
    return i;
} 

 校验 sql 正则方法

 public static boolean isValidSql(final String sql) {
    final String reg = "^[([\u4e00-\u9fa5])([a-zA-Z])([0-9])(\\s)([><=*!_'?:.(),-/%])(\\+)]*$";
    final boolean valid = sql.matches(reg);
    if (!valid) {
      System.out.println("Invalid sql [{}]"+ (Object)sql);
    }
    return valid;
}

 解惑:

char 与 int之间的转换

猜你喜欢

转载自blog.csdn.net/haochaoguo1988/article/details/83659617
今日推荐