3.4.3.4
获取表名错误,动态替换当然也是错的
源代码通过Arrays.asList("table", "into", "join", "using", "update")确定表名,举例如果sql是“CREATE TABLE IF NOT EXISTS”,该方法会认为if是表名,所以请再多考虑各种sql的情况进行表名拆解。
public void accept(TableNameVisitor visitor) { int index = 0; String first = tokens.get(index).getValue(); if (isOracleSpecialDelete(first, tokens, index)) { visitNameToken(tokens.get(index + 1), visitor); } else if (isCreateIndex(first, tokens, index)) { visitNameToken(tokens.get(index + 4), visitor); } else { while (hasMoreTokens(tokens, index)) { String current = tokens.get(index++).getValue(); if (isFromToken(current)) { processFromToken(tokens, index, visitor); } else if (isOnDuplicateKeyUpdate(current, index)) { index = skipDuplicateKeyUpdateIndex(index); } else if (concerned.contains(current.toLowerCase())) { if (hasMoreTokens(tokens, index)) { SqlToken next = tokens.get(index++); visitNameToken(next, visitor); } } } } }
替换表名错误
Comment From: qmdx
表不要设置成关键词
Comment From: pangdangdang
表不要设置成关键词
CREATE TABLE IF NOT EXISTS t_cao_unservice_day_20211225 like t_cao_unservice_day ,请问是否明白这句sql的意思,表名是t_cao_unservice_day_20211225 ,什么叫做表不要设置成关键词,根据关键词table", "into", "join", "using", "update后面衔接的字符串认为是表名,这不是bug吗