带有 sql IN 运算符的参数列表的preparedstatement
Posted
技术标签:
【中文标题】带有 sql IN 运算符的参数列表的preparedstatement【英文标题】:preparedstatement with list of parameters for sql IN operator 【发布时间】: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();
但我无法让它工作。有什么想法吗?
【问题讨论】:
PreparedStatement question in Java against Oracle的可能重复 【参考方案1】:PreparedStatement question in Java against Oracle
@DJ 提到的解决方案效果很好,但您必须注意一种极端情况,即您可以与 IN 子句一起使用的绑定值的数量存在限制。 对于 oracle,我认为接近 1K 或 4K。
【讨论】:
这看起来是一个聪明的解决方案。明天试试,然后回复你。谢谢!以上是关于带有 sql IN 运算符的参数列表的preparedstatement的主要内容,如果未能解决你的问题,请参考以下文章
致命错误:未捕获的异常 'mysqli_sql_exception' 带有消息 'No index used in query/prepared statement'
如何在 Tedious 中运行 sql 查询,为 sql in 运算符提供多个值?
如何在 SQL (JPA) 中使用带有 IN 运算符的嵌套 SELECT 语句?