我有一个sql
,如下所示:
SELECT * FROM T_TABLE WHERE ID IN(?)
我想通过IN(?)
为PrepareStatement
设置参数。我认为所需的方法看起来像这样:
prepareStatement.setList(1,Arrays.asList("1","2","3"));
但我不知道应该使用哪种方法来实现这一目标。
我在here的帮助下尝试了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);
任何帮助都会受到赞赏。
问候。
答案 0 :(得分:4)
基本上你想做的事情不是使用PreparedStatement 直接。
看看这篇精彩的文章,其中展示了其他选择 http://www.javaranch.com/journal/200510/Journal200510.jsp#a2
或者,您可以使用createQuery语句,该语句将接受IN子句 JPQL IN clause: Java-Arrays (or Lists, Sets...)?
答案 1 :(得分: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();