Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在PreparedStatement中填写WHERE-IN参数_Java_Prepared Statement_Where In - Fatal编程技术网

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 (?, ?)