在 Java 中将动态 SQL 查询转换为准备好的语句
Posted
技术标签:
【中文标题】在 Java 中将动态 SQL 查询转换为准备好的语句【英文标题】:Converting Dynamic SQL Query to a Prepared statement in Java 【发布时间】:2011-08-31 14:00:40 【问题描述】:我想编写一个程序,将 SQL 动态查询转换为 Java 中的预准备语句。
所以如果给定一个像“SELECT * FROM EMPLOYEE_TABLE WHERE FIRST_NAME='BOB';”这样的字符串
我想使用代码将其转换为 java 准备好的语句。
是否有任何现有的工具可以做到这一点,如果没有,您能否提供有关创建此类工具的任何信息?
谢谢!
【问题讨论】:
你解决了这个问题吗? 不是真的,很遗憾。 【参考方案1】:见JDBC 特别是prepared statements的部分。
在您对 JDBC 有所了解之前,我不会使用任何映射技术。
【讨论】:
感谢您的回答。我对 JDBC 和 Prepared Statements 非常熟悉。但是,我正在编写的程序是通过程序源代码,发现 SQL 注入漏洞(主要是动态查询),将查询重写为准备好的语句并执行它。 我相信如果你正确使用准备好的语句,你不会有sql注入问题。但听起来您正在动态加入表(而不仅仅是替换 where 子句参数)。如果是这种情况,您应该认真考虑映射技术。另请参阅:***.com/questions/1291584/is-jdbc-secure 是的,我同意。我的程序将做的是使用 Aspects 遍历 Web 应用程序源代码,找到动态查询(不安全),解析查询,然后编织一个安全的准备好的语句,该语句将代替不安全的动态执行询问。我认为我最好的解决方案是使用查询解析器,然后根据那里收集的信息生成准备好的语句。 @bsimic 您可以在所有 Connection.createStatements 或 Statement.executeQuery 上放置一个调用者切入点(您将需要 AJ 声明性)。但我认为重构代码可能会更好。以上是关于在 Java 中将动态 SQL 查询转换为准备好的语句的主要内容,如果未能解决你的问题,请参考以下文章
带有 sql 转义的动态 mysql 查询是不是与准备好的语句一样安全?