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 一个是 正则匹配。