带有sql IN运算符参数列表的preparedstatement

时间:2015-11-27 00:05:24

标签: java sql oracle prepared-statement

我在外部属性文件中有一个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();

但我无法让它发挥作用。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

PreparedStatement question in Java against Oracle

@DJ提出的解决方案很有用,但你必须处理一个边缘情况,即你可以使用IN子句限制绑定值的数量。 对于oracle,我认为接近1K或4K。