在 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 查询是不是与准备好的语句一样安全?

如何在 SQL Server 中将行动态转换为列

如何在 Visual Studio 中将此 SQL 查询转换为 Elasticsearch 查询?

java中将表单转换为PDF

如何在 SQL Server 或 C# 代码中将行转换为列

在 sql 插入查询中将 datetime 转换为 smalldatetime