繁体   English   中英

SQL'in(?)'子句的SqlServer PrepareStatement设置参数

[英]SqlServer PrepareStatement set parameters for SQL 'in(?)' clause

我有一个看起来像这样的sql

SELECT * FROM T_TABLE WHERE ID IN(?)

我想通过PrepareStatementIN(?)设置参数。 我认为所需的方法将如下所示:

prepareStatement.setList(1,Arrays.asList("1","2","3"));

但是我不知道应该使用哪种方法来实现这一目标。

我在这里的帮助下尝试过setArray方法,并收到了这些错误消息。

java.sql.SQLFeatureNotSupportedException:
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.createArrayOf(SQLServerConnection.java:2763)
    at com.newegg.ec.review.summary.dao.mssql.MSSQLReviewAccess.nextPage(MSSQLReviewAccess.java:165)

这是否意味着SqlService不支持createArrayOf方法? 现在,我该如何实现呢? 我不喜欢这样加入sql的方式:

String sql = "SELECT * FROM T_TABLE WHERE ID IN("+in+")";

我的代码

ps.setArray(1, conn.createArrayOf("VARCHAR",items.subList(1,9);

任何帮助将不胜感激。

问候。

基本上,使用PreparedStatement不可能直接实现您要执行的操作。

看看这篇精彩的文章,它显示了其他替代方法http://www.javaranch.com/journal/200510/Journal200510.jsp#a2

或者,您可以使用createQuery语句,该语句将按照JPQL IN子句接受IN子句:Java数组(或Lists,Sets ...)?

请参阅PreparedStatement.setInt ,它采用参数index和value:

private String sqlParams(int numParams) {
    StringBuilder sb = new StringBuilder();
    if(numParams <= 0) return sb.toString();
    for(int ctr = 0; ctr < numParams - 1; ++ctr) {
        sb.append("?,");
    }
    sb.append("?");
    return sb.toString();
}

/** In the method that accesses the DB... */
/** paramArray is an array of parameters for the IN clause. */
PreparedStatement preparedStatement = sqlObj.prepareStatement(
    "SELECT * FROM T_TABLE WHERE ID IN(" + sqlParams(paramArray.length) + ")");
for(int idx = 0; idx < paramArray.length; ++idx) {
    preparedStatement.setInt(idx, paramArray[idx]);
}
ResultSet rs = preparedStatement.executeQuery();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM