3

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

SELECT * FROM T_TABLE WHERE ID IN(?)

我想为IN(?)via设置参数PrepareStatement。我认为所需的方法如下所示:

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

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

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

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);

任何帮助将不胜感激。

问候。

4

2 回答 2

4

基本上,您想要做的事情不能直接使用 PreparedStatement。

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

或者,您可以使用 createQuery 语句,该语句将根据 JPQL IN 子句接受 IN 子句:Java-Arrays (or Lists, Sets...)?

于 2013-08-23T08:26:13.383 回答
0

请参阅PreparedStatement.setInt,它采用参数索引和值:

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();
于 2013-08-23T04:15:35.827 回答