【问题标题】:Is there a class or method in Java that will check if a string is a SQL Server keyword?Java 中是否有一个类或方法可以检查字符串是否是 SQL Server 关键字?
【发布时间】:2010-09-17 03:27:57
【问题描述】:

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

【问题讨论】:

    标签: java sql-server


    【解决方案1】:

    很容易添加:

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

    【讨论】:

      【解决方案2】:

      如果您想防止 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();
      

      【讨论】:

        【解决方案3】:

        为什么不从 this stored procedure 开始并修改它以满足您的需求,甚至可以按照 Steve 的建议使用 hashmap 将其转换为 Java。

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 2020-07-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多