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.