我有:
Map<String, ExtractData> extractMap = new HashMap<String, ExtractData>();
为什么以下方法不能从它调用的方法中获取返回数据?
private void fetchExtractData(CentralExportSession exportSession) throws RemoteException {
System.out.println("Fetching Extract Data");
extractMap = exportSession.getExtractData(consDB);
System.out.printLn("Extract Data Fetched");
}
这要求:
public Map<String, ExtractData> getExtractData(DataSourceInfo ds) throws RemoteException {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
Map<String, ExtractData> extractMap = new HashMap<String, ExtractData>();
String qry = "...select statement that returns about 500k rows...;"
try {
conn = getConnection();
ps = conn.PrepareStatment(qry);
rs = ps.executeQuery();
while (rs.next()) {
String dataKey = rs.getString("key");
ExtractData data = new ExtractData();
...code that builds up the 'data' object from the result...
extractMap.put(dataKey, data);
System.out.println("Added key : " + dataKey);
}
} catch (SQLException e) {
e.printStackTrace();
throw new EJBException(e);
} finally {
System.out.println("Cleaning up...");
cleanup(conn, ps, rs);
System.out.println("Returning Map extractMap...");
return extractMap;
}
}
“获取提取数据”打印,“添加密钥:”,“清理...”和“返回地图提取地图...”打印,但不打印调用方法中的“提取数据提取”。我没有看到任何可见的异常,控制只是永远不会传递回调用方法,我的CPU使用率会一直持续到我杀死它。
编辑:我已经尝试将“return”语句移动到“try”块内部(在“while”之后)和“finally”块之后没有区别。 return语句的位置不会影响(缺乏)结果。
这似乎是一个内存问题,因为人为地将结果集限制为200k行允许它运行,但是一旦我过去那么......