private Vector<String> getNext() throws ServerException {
        if (m_exhausted) return null;
        try {
            if (m_rs.next()) {
                Vector<String> result = new Vector<String> ();
                Integer recordKey = m_rs.getInt(1);
                result.add(m_rs.getString(2));
                Date d = new Date(m_rs.getLong(3));
                try {
                    result.add(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(d));
                } catch (Exception e) { // won't happen
                    e.printStackTrace();
                }
                ResultSet rs = null;
                try {
                    String sql = "SELECT rcSet.setSpec from rcSet, rcMembership "
                        + "WHERE rcMembership.recordKey = " + recordKey
                        + " AND rcMembership.setKey = rcSet.setKey";
                    logger.debug("Executing query: " + sql);
                    rs = new_stmt.executeQuery(sql);
                    while (rs.next()) {
                        String setSpec = rs.getString(1);
                        result.add(setSpec);
                    } 
                } catch (SQLException e) {
                    throw new ServerException("Error determining set specs for record with a key : " + recordKey, e);
                } finally {
                    if (rs != null) try { rs.close(); } catch (Exception e) { }
                }
                return result;
            } else {
                m_exhausted = true;
                close(); // since we know it was exhausted
                return null;
            }
        } catch (SQLException e) {
            close(); // since we know there was an error
            throw new ServerException("Error pre-getting next string from db", e);
        }
    }