Использование регулярных выражений для проверки операторов 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, у вас будет валидатор утверждений в кратчайшие сроки и бесплатно.

Другие вопросы по тегам