【问题标题】:preparedstatement with list of parameters for sql IN operator带有 sql IN 运算符的参数列表的preparedstatement
【发布时间】:2015-11-27 00:05:24
【问题描述】:

我在外部属性文件中有一条 sql 语句,因此不能像某些人建议的那样动态修改它:

query = select distinct BSG_HANDLE FROM MYUSER.MYTABLE WHERE RATE_CODE IN (?) AND CORP = ? 

SOAP 请求提供将用于填充 IN 值的字符串数组。

public BsgHandleResponse getBsgHandleByRateCode(
@QueryParam("rateCodes") String rateCodes,
@QueryParam("corp") String corp)

然后我将它们放入准备好的语句中,如下所示:

ps = startTimedPreparedStatement(conn,SQL_FROM_PROPERTIES_FILE);
ps.setString(1, rateCodes);
ps.setString(2, corp);
rs = ps.executeQuery();

如果 rateCodes 是这样的单个字符串值,它可以正常工作:

25

但是对于这样的多个值失败:

25, 1P

我认为我必须这样做

    public BsgHandleResponse getBsgHandleByRateCode(
    @QueryParam("rateCodes") final List<String> rateCodes,
    @QueryParam("corp") String corp)

    ps = startTimedPreparedStatement(conn,SQL_FROM_PROPERTIES_FILE);
    ps.setArray(1, rateCodes);
    ps.setString(2, corp);
    rs = ps.executeQuery();

但我无法让它工作。有什么想法吗?

【问题讨论】:

标签: java sql oracle prepared-statement


【解决方案1】:

PreparedStatement question in Java against Oracle

@DJ 提到的解决方案效果很好,但您必须注意一种极端情况,即您可以与 IN 子句一起使用的绑定值的数量存在限制。 对于 oracle,我认为接近 1K 或 4K。

【讨论】:

  • 这看起来是一个聪明的解决方案。明天试试,然后回复你。谢谢!
猜你喜欢
  • 2011-03-07
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多