Existe uma classe ou método em Java que irá verificar se uma string é uma palavra-chave do SQL Server?

Eu quero algo que pode verificar se uma string é "SELECT", "INSERT", etc. Eu só estou curioso para saber se isso existe.

1

4 Respostas

Fácil o suficiente para adicionar:

    HashSet  sqlKeywords    =
     new HashSet(Arrays.asList(
       new String[] { ... cut and paste a list of sql keywords here ..  }));
4
adicionado

Se você estiver tentando impedir a injeção de SQL, seria melhor aproveitar os recursos internos do JDBC, como instruções preparadas. Em geral, usar a concatenação de strings para formar a instrução SQL é perigoso. De Prevenindo injeção de SQL em Java :

Prepared Statements:

String selectStatement = "SELECT * FROM User WHERE userId = ? ";
PreparedStatement prepStmt = con.prepareStatement(selectStatement);
prepStmt.setString(1, userId);
ResultSet rs = prepStmt.executeQuery();
3
adicionado

DatabaseMetaData.getSQLKeywords retornará as palavras-chave do banco de dados que não estão no SQL-2003 (a palavra-chave SQL-2003 pode ser encontrada no padrão). Existem outros métodos dentro dessa interface para obter vários tipos de nomes de função e similares.

Como Chase Seibert menciona, não pense que essa é uma maneira eficaz de bloquear ataques de injeção de SQL.

1
adicionado

por que não começar com esse armazenado procedimento e modificá-lo para atender às suas necessidades, possivelmente até convertê-lo para Java usando o hashmap como Steve sugeriu.

Pessoalmente eu gosto da idéia de um procedimento armazenado porque bancos de dados diferentes podem ter diferentes palavras-chave, então parece elegante ter o banco de dados aprovado

1
adicionado