当前位置: 首页 > 面试题库 >

PreparedStatement IN子句替代项?

瞿兴朝
2023-03-14
问题内容

将SQL IN子句与的实例一起使用的最佳解决方法java.sql.PreparedStatement是什么,由于SQL注入攻击安全性问题,多个值不支持该子句:一个?占位符代表一个值,而不是值列表。

考虑以下SQL语句:

SELECT my_column FROM my_table where search_column IN (?)

使用preparedStatement.setString( 1, "'A', 'B', 'C'" );本质上是一种不可行的尝试,它是首先解决使用原因的方法?。

有哪些解决方法?


问题答案:

建议的选项是:

  • 准备SELECT my_column FROM my_table WHERE search_column = ?,对每个值执行它,并在客户端对结果进行UNION。只需要一个准备好的语句。缓慢而痛苦。
  • 准备SELECT my_column FROM my_table WHERE search_column IN (?,?,?)并执行它。每个IN-LIST大小需要一个准备好的语句。快速而明显。
  • 准备SELECT my_column FROM my_table WHERE search_column = ? ; SELECT my_column FROM my_table WHERE search_column = ? ; …并执行它。[或UNION ALL代替那些分号。–ed]每个IN-LIST大小需要一个准备好的语句。愚蠢的慢,严格比差WHERE search_column IN (?,?,?),所以我不知道为什么博主甚至建议这样做。
  • 使用存储过程来构造结果集。
  • 准备N个不同的IN列表大小查询;例如,具有2、10和50个值。要搜索具有6个不同值的IN列表,请填充size-10查询,使其看起来像SELECT my_column FROM my_table WHERE search_column IN (1,2,3,4,5,6,6,6,6,6)。任何运行良好的服务器都将在运行查询之前优化出重复值。


 类似资料:
  • 问题内容: 结合使用子句和实例的最佳解决方法是什么,由于注入攻击安全性问题,多个值不支持该子句:一个?占位符代表一个值,而不是值列表。 考虑以下SQL语句: 使用;本质上是一种不可行的尝试,它是首先解决使用原因的解决方法?。 有哪些解决方法? 问题答案: 建议的选项是: 准备,对每个值执行它,并在客户端对结果进行。只需要一个准备好的语句。缓慢而痛苦。 准备并执行它。每个大小需要一个准备好的语句。快

  • 问题内容: 我有两个表:-表a,表b。 表一 - -ID - - 表b - -ID - - 我必须在没有 UNION 命令的情况下获得这样的输出: - - ID - - - 注意:我有一个联合的解决方案:- 我需要替代方案。 请专家建议。 问题答案: 为此,我们需要另一个具有(至少)2行的表: 然后,如果我们只想要一个查询,则可以使用( 这很有趣,请不要在生产中使用 ,这就是为什么要使用 ): 在

  • 问题内容: 使用JavaScript,我将名称从网页中拉出并以某种方式将它们串在一起(可能与数组一起使用)。将所有名称收集在一起后,我需要制作另一个字符串,以提供名称的所有电子邮件地址。电子邮件地址不在网页上,因此我必须以某种方式列出脚本中所有可能的thisName = thisEmail。我本打算通过发表大量的if语句来解决这个问题,但我认为必须有一种更有效的方法。有什么建议么? 问题答案: 一

  • null 代码如下所示: 和我想提高的班级: 我该怎么办?每个字段都在使用,但每个触发器都在使用。另外,这种情况有点特殊(OnFinalMethod需要参数)。基于上面的文章,我尝试重构这段代码,但没有成功。 你知道吗?:)

  • 单子通常依次解释和。但是,我认为您也可以通过实现(以及?) 在缺乏一流函数的编程语言中,非常难以使用。另一方面,看起来很容易。 但是,我不能完全理解是如何工作的。显然,它具有[Haskell]类型 单子连接函数 有人能用、和描述一些常见单子的实现吗?(即根本不提。)我想也许这能帮助我沉入我愚蠢的大脑...

  • 问题内容: Java中goto关键字的替代功能是什么? 由于Java没有goto。 问题答案: 你可以使用带标签的BREAK语句: 但是,在正确设计的代码中,你不需要GOTO功能。