SQLException After end of result set

samples[cc].setId(set.getInt(Samples.ID));这一句抛了SQL异常:After end of set。
一直找不到原因,不使用 OR 的时候却能正确执行!!!

     public Samples[] getSampleInfo(int[] ids) {
        Samples samples[] = new Samples[ids.length];
        Connection conn = DBMalwareHelper.getConnection();
        StringBuilder builder = new StringBuilder();
        Arrays.stream(ids).filter(i -> i != ids[0]).forEach(i -> builder.append(" OR " + Samples.ID + " = " + i));
        String sql = "SELECT * FROM " + DBMalwareHelper.TABLE_SAMPLES + " WHERE " + Samples.ID + " = " + ids[0] + builder.toString();
        Statement statement = null;
        ResultSet set = null;
        try {
            statement = conn.createStatement();
            set = statement.executeQuery(sql);
            int cc = 0;

            while (set.next()) {
                samples[cc].setId(set.getInt(Samples.ID));
                samples[cc].setPackageName(set.getString(Samples.PACKAGE));
                samples[cc].setType(set.getString(Samples.TYPE));
                samples[cc].setPath(set.getString(Samples.PATH));
                cc++;
            }

            return samples;

        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        } finally {
            DBUtil.closeSetStatConn(conn, set, statement);
        }
    }

getSamplesInfo函数第一行后面,samples数组里面的元素还要new初始化。

http://www.cnblogs.com/azai/archive/2010/01/09/1642781.html

循环语句有问题:应该这样:
Samples sam = null;
while (set.next()) {
sam = new Samples();
sam.setId(set.getInt(Samples.ID));
sam.setPackageName(set.getString(Samples.PACKAGE));
sam.setType(set.getString(Samples.TYPE));
sam.setPath(set.getString(Samples.PATH));
samples[cc] = sam;
cc++;
}

是因为你引用了多个结果集的时候,由于前一个结果集已经和数据库关闭,你又引用 ,那当然找到的结果为Null.