使用正则表达式验证mysql语句

时间:2015-07-07 09:39:51

标签: java mysql regex

我正在用java编写程序。在对话框中,用户需要输入MySQL SELECT语句。程序必须验证继续运行的语句。我的问题是:有没有办法以及如何使用正则表达式验证语句。我需要"只有"正则表达式。感谢。

4 个答案:

答案 0 :(得分:4)

好吧,也许是对于扩展的正则表达式,但是对于“正则表达式”的原始含义,代表“Regular Language” - “没有。”

每个SELECT语句都是:

SELECT x FROM y WHERE z

但是,由于y本身可以是SELECT语句,这至少与平衡括号语言一样难,这是不规则的。

答案 1 :(得分:3)

如果您的目标是仅允许SELECT语句而不是仅向打开数据库连接的数据库用户授予此操作。之后只需处理SQLException

你真的不想手工编写和维护验证码,因为要记住的东西太多了。例如,如果JDBC连接使用allowMultiQueries=true参数,那么可以在String中执行多个语句,如SELECT * FROM table; DROP TABLE table;

答案 2 :(得分:2)

这不是正则表达式使用的地方。

解决此问题的优雅方法是使用 BNF for Java 作为select语句的验证程序。如果你将它提供SQL语法,就像这个sql-99.bnf,你将立即免费获得你的语句验证器。

答案 3 :(得分:1)

如果是SELECT语句,那么它应该以SELECT开头。下面的代码是匹配以SELECT开头的任何内容。

String sa = "THIS SELECT * from table;";
System.out.println(sa.matches("(?i)^select .*")); //FALSE as the input string is not valid select statement
sa = "SELECT * from table;";
System.out.println(sa.matches("(?i)^select .*")); //TRUE as the input string is  valid select statement