Есть ли в Java класс или метод, который будет проверять, является ли строка ключевым словом SQL Server? - PullRequest
1 голос
/ 14 октября 2008

Я хочу что-то, что может проверить, является ли строка «SELECT», «INSERT» и т. Д. Мне просто любопытно, существует ли она.

Ответы [ 4 ]

4 голосов
/ 14 октября 2008

Достаточно легко добавить:

    HashSet<String>  sqlKeywords    =
     new HashSet<String>(Arrays.asList(
       new String[] { ... cut and paste a list of sql keywords here ..  }));
3 голосов
/ 15 октября 2008

Если вы пытаетесь предотвратить внедрение SQL, лучше использовать встроенные функции JDBC, такие как подготовленные операторы. В общем, использование конкатенации строк для формирования оператора SQL опасно. От Предотвращение внедрения SQL в Java :

Подготовленные заявления :

String selectStatement = "SELECT * FROM User WHERE userId = ? ";
PreparedStatement prepStmt = con.prepareStatement(selectStatement);
prepStmt.setString(1, userId);
ResultSet rs = prepStmt.executeQuery();
1 голос
/ 15 октября 2008

DatabaseMetaData.getSQLKeywords будет возвращать ключевые слова баз данных, которых нет в SQL-2003 (ключевое слово SQL-2003 можно найти в стандарте). В этом интерфейсе есть другие методы для получения различных типов имен функций и аналогичных.

Как отмечает Чейз Сейберт, не думайте, что это эффективный способ блокировать атаки с использованием SQL-инъекций.

1 голос
/ 14 октября 2008

почему бы не начать с этой хранимой процедуры и изменить ее в соответствии с вашими потребностями, возможно, даже преобразовать ее в Java, используя хэш-карту, как предложил Стив.

Лично мне нравится идея хранимой процедуры, потому что в разных базах данных могут быть разные ключевые слова, поэтому кажется элегантным иметь решение для базы данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...