Java中是否有一个类或方法来检查字符串是否是SQL Server关键字?

时间:2008-10-14 16:32:04

标签: java sql-server

我想要一些可以检查字符串是否为“SELECT”,“INSERT”等的东西。我只是好奇它是否存在。

4 个答案:

答案 0 :(得分:4)

很容易添加:

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

答案 1 :(得分:3)

如果您正在尝试阻止SQL注入,那么最好利用JDBC的内置功能,例如预准备语句。通常,使用字符串连接来形成SQL语句是危险的。来自Preventing SQL Injection in Java

准备好的陈述

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

答案 2 :(得分:1)

为什么不从this stored procedure开始并根据您的需要进行修改,甚至可以使用史蒂夫建议的hashmap将其转换为Java。

我个人喜欢存储过程的想法,因为不同的数据库可能有不同的关键字,所以让数据库通过判断似乎很优雅

答案 3 :(得分:1)

DatabaseMetaData.getSQLKeywords将返回不在SQL-2003中的数据库关键字(可在标准中找到SQL-2003关键字)。该接口中还有其他方法可用于获取各种类型的函数名称和类似函数。

正如Chase Seibert所提到的,不要认为这是阻止SQL注入攻击的有效方法。