我在外部属性文件中有一个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();
但我无法让它发挥作用。有什么想法吗?
答案 0 :(得分:0)
PreparedStatement question in Java against Oracle
@DJ提出的解决方案很有用,但你必须处理一个边缘情况,即你可以使用IN子句限制绑定值的数量。 对于oracle,我认为接近1K或4K。