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

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 に答える