这是我的疑问。
String SELECT_USERS_FROM_GROUPS = "select * from user where group_id in ?";
我需要从列表中的组中选择用户:
例如,列表可以是。
long[] groupIdList = { 1, 2 };
这是我的代码:
public List<User> getUsersFromGroups(long[] groupIdList) {
ResultSet rs = null;
PreparedStatement statement = null;
Connection connection = null;
List<User> userList = null;
User user;
try {
connection = Connector.getConnection();
statement = connection.prepareStatement(SELECT_USERS_FROM_GROUPS);
Array groupIdArray = connection.createArrayOf("LONG", groupIdList);
statement.setArray(1, groupIdArray);
rs = statement.executeQuery();
userList = new ArrayList<User>();
while (rs.next()) {
user = new User();
user = fillUser(rs);
userList.add(user);
}
} catch (SQLException e) {
logger.error(e.getMessage(), e);
} finally {
ResourcesUtil.release(rs, statement, connection);
}
return userList;
}
但是我尝试了一个例外行:Array groupIdArray = connection.createArrayOf("LONG", groupIdList);
有人可以帮助我纠正错误,或指导另一种可能的解决方案。 谢谢你;
- 编辑
例外:
ERROR UserDao:138 -
java.sql.SQLFeatureNotSupportedException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at com.mysql.jdbc.SQLError.notImplemented(SQLError.java:1350)
at com.mysql.jdbc.JDBC4Connection.createArrayOf(JDBC4Connection.java:55)
at com.mchange.v2.c3p0.impl.NewProxyConnection.createArrayOf(NewProxyConnection.java:589)
at com.thehuxley.data.dao.UserDao.getUsersFromGroups(UserDao.java:120)
答案 0 :(得分:1)
JDBC预处理语句仅支持具有已知数量参数的IN子句,每个值必须在原始查询中表示:
select * from user where group_id in (?, ?)
使用statement.setXXX方法设置参数与任何其他参数一样。如果需要可变数量的参数,则必须动态生成查询字符串(在IN子句中提供正确的?)。
答案 1 :(得分:0)
在以下情况下抛出SQLFeatureNotSupportedException
:
JDBC驱动程序不支持此数据类型
所以看起来您的数据库不支持"LONG"
数据类型。