人大金仓java.lang.StringIndexOutOfBoundsException: String index out of range: 100

nested exception is org.apache.ibatis.executor.ExecutorException: Error preparing statement. Cause: java.lang.StringIndexOutOfBoundsException: String index out of range: 100

--一个普通的查询
select * from table_form

问题代码kingbase8 8.2.0

## com.kingbase8.core.CachedQueryCreateAction
boolean hasForUpdate(String sql) {
        String todo = sql.toLowerCase();
        int index = todo.indexOf("for");

        while(true) {
            while(index != -1) {
                int tempindex = index + 3;
                if (todo.charAt(tempindex) != ' ' && todo.charAt(tempindex) != '\n' && todo.charAt(tempindex) != '\t' && todo.charAt(tempindex) != '\r') {
                    index = todo.indexOf("for", tempindex);
                } else {
                    index = Parser.skipBlank(todo, tempindex);
                    if (index + 6 <= todo.length() && todo.substring(index, index + 6).equals("update")) {
                        return true;
                    }

                    index = todo.indexOf("for", index);
                }
            }

            return false;
        }
    }

解决方式 升级至 8.6.0

## com.kingbase8.core.CachedQueryCreateAction
boolean hasForUpdate(String _sql) {
        TraceLogger.logLineInfo(Level.ALL, "lineInfo");
        Pattern SELECT_REGEX = Pattern.compile("[\\s]*SELECT\\s", 2);
        Pattern FOR_UPDATE_REGEX = Pattern.compile("\\sFOR[\\s]+UPDATE[\\s]*", 2);
        return SELECT_REGEX.matcher(_sql).find() && FOR_UPDATE_REGEX.matcher(_sql).find();
    }

一个是indexof 一个是 正则匹配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值