我有一个方法,它会为ResultSet
取一个List
Object[]
的每一行。我放在服务器上的一个查询回来了超过400万行。但是,每行(最多)为40个字符。
尽管400万行是大便,但每行加40个字符不应该导致我的资源耗尽,但它确实如此。
ResultSetMetaData rsmd = someResultSet.getMetaData();
int columnCount = rsmd.getColumnCount();
someResultSet.last();
int totalRows = someResultSet.getRow();
List<Object[]> result = new ArrayList(totalRows);
List<String> columnNames = new ArrayList();
List<Object> addRow = new LinkedList();
double someValue = 0d;
for (int x = 0; x < columnCount; x++) columnNames.add(rsmd.getColumnName(x+1));
NumberFormat nf = NumberFormat.getInstance();
someResultSet.beforeFirst();
while (someResultSet.next()) {
addRow.clear();
for (int x = 0; x < columnNames.size(); x++) {
if (someResultSet.getObject(x + 1) instanceof Double) {
someValue = someResultSet.getDouble(x + 1);
addRow.add(nf.format(someValue));
}
else if (someResultSet.getObject(x + 1) != null) addRow.add(someResultSet.getObject(x + 1).toString());
else addRow.add("");
}
result.add(addRow.toArray());
}
为什么我的系统资源不足?在我开发的盒子上,我没有遇到任何问题,但是在需要运行的盒子上我没有爱。