¿Hay una clase o método en Java que verificará si una cadena es una palabra clave SQL Server?

Quiero algo que pueda verificar si una cadena es "SELECCIONAR", "INSERTAR", etc. Solo tengo curiosidad si esto existe.

1

4 Respuestas

Lo suficientemente fácil de agregar:

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

Si intenta evitar la inyección de SQL, sería mejor aprovechar las funciones integradas de JDBC, como las declaraciones preparadas. En general, usar la concatenación de cadenas para formar la declaración de SQL es peligroso. De Cómo evitar la inyección de SQL en Java :

Prepared Statements:

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

DatabaseMetaData.getSQLKeywords devolverá las palabras clave de las bases de datos que no están en SQL-2003 (la palabra clave SQL-2003 se puede encontrar en el estándar). Hay otros métodos dentro de esa interfaz para obtener varios tipos de nombres de funciones y similares.

Como menciona Chase Seibert, no piense que esta es una forma efectiva de bloquear ataques de inyección SQL.

1
agregado

¿por qué no comenzar con esto almacenado procedimiento y modifíquelo según sus necesidades, incluso puede convertirlo a Java utilizando el hashmap como sugirió Steve.

Personalmente, me gusta la idea de un procedimiento almacenado porque las diferentes bases de datos pueden tener diferentes palabras clave, por lo que parece elegante hacer que la base de datos pase el juicio.

1
agregado