栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java

建议的选项是:

  • 准备
    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)
    。任何运行良好的服务器都会在运行查询之前优化出重复值。
    这些选项都不是超级好。

这些地方已经用同样合理的替代方法回答了重复的问题,但仍然没有一个超级好:

在IN子句中带有参数列表的

PreparedStatement

如何在准备好的语句上设置参数列表?
如果使用的是JDBC4,并且服务器支持x = ANY(y),则正确答案的用法PreparedStatement.setArray如下:

PreparedStatement IN子句替代项?
不过,似乎没有任何办法可以setArray处理IN列表。

有时,SQL语句是在运行时加载的(例如,从属性文件中加载),但是需要可变数量的参数。在这种情况下,首先定义查询:

query=SELECt * FROM table t WHERe t.column IN (?)

接下来,加载查询。然后在运行参数之前确定参数的数量。一旦知道参数计数,请运行:

sql = any( sql, count );

例如:

public static String any(String sql, final int params) {    // Create a comma-delimited list based on the number of parameters.    final StringBuilder sb = new StringBuilder( new String(new char[params]).replace("", "?,")    );    // Remove trailing comma.    sb.setLength(Math.max(sb.length() - 1, 0));    // For more than 1 parameter, replace the single parameter with    // multiple parameter placeholders.    if (sb.length() > 1) {        sql = sql.replace("(?)", "(" + sb + ")");    }    // Return the modified comma-delimited list of parameters.    return sql;}

对于某些不支持通过JDBC 4规范传递数组的数据库,此方法可以促进将

slow = ?
转换为
faster IN (?)
子句条件,然后可以通过调用该
any
方法进行扩展。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/372339.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号