没有对应的 MysqlShowVariablesStatement 导致 SQLUtils 无法解析 mysql 语句: show variables;
原提问者GitHub用户Aaron3S
在使用 SQL 解析器时,如果无法解析 Mysql 的 show variables 命令,可能是由于以下原因:
SQL 解析器版本不兼容:不同版本的 SQL 解析器对 Mysql 的 show variables 命令的解析方式可能会有所不同。如果您使用的 SQL 解析器版本较低,可能无法正确解析 show variables 命令。建议您升级 SQL 解析器到最新版本,并重新尝试解析命令。
配置文件错误:如果 SQL 解析器的配置文件设置不正确,可能会导致解析失败。建议您检查配置文件的设置,并确保设置正确。
命令语法错误:如果 show variables 命令的语法错误,可能会导致解析失败。建议您检查命令的语法是否正确。
这可能是由于Druid连接池版本较旧,不支持解析该特定的MySQL语句。
解决这个问题的方法是更新Druid连接池到支持show variables;语句解析的版本。您可以尝试升级Druid连接池的版本到最新的稳定版本,以确保其具有对常见MySQL语句的正确解析和支持。
你用的druid版本可能太低,刚刚拉最新master代码验证ok。
public class SHOW_variables_Syntax_Test extends TestCase {
public void test_0() throws Exception {
String sql = "SHOW variables;";
//SQLStatementParser parser = new MySqlStatementParser(sql);
List<SQLStatement> stmtList =SQLUtils.parseStatements(sql, JdbcConstants.MYSQL);
String text = SQLUtils.toSQLString(stmtList, JdbcConstants.MYSQL);
System.out.println("test_0=="+text);
Assert.assertEquals("SHOW VARIABLES;", text);
}
public void test_1() throws Exception {
String sql = "SHOW variables like '%page%';";
SQLStatementParser parser = new MySqlStatementParser(sql);
List<SQLStatement> stmtList =SQLUtils.parseStatements(sql, JdbcConstants.MYSQL);
String text = SQLUtils.toSQLString(stmtList, JdbcConstants.MYSQL);
System.out.println("test_1=="+text);
Assert.assertEquals("SHOW VARIABLES LIKE '%page%';", text);
}
}
执行结果:
原回答者GitHub用户lizongbo
是SQLUtils无法解析MySQL的show variables语句导致的。可能的原因如下:
SQL解析器版本过低:SQLUtils工具在解析MySQL的show variables语句时需要使用适当的SQL解析器版本,您可以检查当前使用的SQL解析器版本是否过低。
SQL解析器不支持show variables语句:有些SQL解析器不支持MySQL的show variables语句,这可能是导致解析失败的原因之一。您可以尝试使用更现代的SQL解析器,或者使用SQLUtils提供的MySQL特定解析器来解析show variables语句。
show variables语句中有错误:show variables语句本身可能包含错误,例如语法错误、无效的变量等。您可以检查语句中的变量名称和语法是否正确,以便更好地定位问题。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。