Использование регулярных выражений для проверки операторов mysql
Я пишу программу на Java. В диалоговом окне пользователь должен ввести оператор MySQL SELECT. Программа должна подтвердить утверждение, чтобы продолжить выполнение. У меня вопрос: есть ли способ и как проверить утверждение с помощью регулярных выражений. Мне нужен "только" шаблон регулярного выражения. Благодарю.
4 ответа
Ну, может быть, для расширенного регулярного выражения, но для первоначального значения "регулярное выражение", которое означает "Регулярное выражение", для " Регулярный язык" - нет.
Каждый оператор SELECT:
SELECT x FROM y WHERE z
Тем не менее, так как y
сам по себе может быть оператором SELECT, это по крайней мере так же сложно, как язык сбалансированных скобок, который является нерегулярным.
Если ваша цель - разрешить только SELECT
операторы, которые предоставляют только эту операцию пользователю базы данных, который открывает соединение с базой данных. После этого просто обработайте SQLException
,
Вы действительно не хотите писать и поддерживать код проверки вручную, потому что есть слишком много вещей, которые нужно запомнить. Например, если ваше соединение JDBC использует allowMultiQueries=true
параметр, то можно выполнить несколько операторов в строке как SELECT * FROM table; DROP TABLE table;
,
Если это оператор 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
Это не место для использования регулярных выражений.
Элегантный способ решить эту проблему - использовать BNF для Java в качестве средства проверки ваших операторов выбора. Если вы будете использовать SQL-грамматику, например, sql-99.bnf, у вас будет валидатор утверждений в кратчайшие сроки и бесплатно.