Java 如何在PreparedStatement中填写WHERE-IN参数
这就是我的疑问Java 如何在PreparedStatement中填写WHERE-IN参数,java,prepared-statement,where-in,Java,Prepared Statement,Where In,这就是我的疑问 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;
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;
}
以下情况下会引发
SQLFeatureNotSupportedException
:
JDBC驱动程序不支持此数据类型
因此,看起来您的数据库不支持
“LONG”
数据类型。JDBC准备的语句仅支持具有已知数量参数的子句,每个值必须在原始查询中表示:
select * from user where group_id in (?, ?)
参数的设置与使用statement.setXXX方法的任何其他参数一样。如果需要可变数量的参数,则必须动态生成查询字符串(在in子句中提供正确数量的?)
另请参见:没有数组超出边界异常?!!此异常表示数据库或驱动程序不支持此功能。您正在使用哪个数据库/驱动程序?我熟悉的大多数数据库都支持某种形式的“Long”类型。createArrayOf的第一个参数是数据库可以识别的SQL类型名称,因此您可能只需要更改要传递的第一个参数。您使用的是哪个dbm?mysql不支持数组,请参见解决方案的第二个答案。我尝试将LONG改为BIGINT。它也不起作用@strwils
select * from user where group_id in (?, ?)