Java不返回映射
我有: 这需要:Java不返回映射,java,Java,我有: 这需要: private void fetchExtractData(CentralExportSession exportSession) throws RemoteException { System.out.println("Fetching Extract Data"); extractMap = exportSession.getExtractData(consDB); System.out.printLn("Extract Data Fetched")
private void fetchExtractData(CentralExportSession exportSession) throws RemoteException {
System.out.println("Fetching Extract Data");
extractMap = exportSession.getExtractData(consDB);
System.out.printLn("Extract Data Fetched");
}
公共映射getExtractData(DataSourceInfo ds)引发RemoteException{
连接conn=null;
PreparedStatement ps=null;
结果集rs=null;
Map extractMap=newhashmap();
String qry=“…返回大约500k行的select语句…”
试一试{
conn=getConnection();
ps=连接准备状态(qry);
rs=ps.executeQuery();
while(rs.next()){
字符串dataKey=rs.getString(“key”);
ExtractData数据=新ExtractData();
…根据结果构建“数据”对象的代码。。。
extractMap.put(数据键,数据);
System.out.println(“添加键:+dataKey”);
}
}捕获(SQLE异常){
e、 printStackTrace();
抛出新的EJBException(e);
}最后{
System.out.println(“清理…”);
清理(连接、ps、rs);
System.out.println(“返回地图提取地图…”);
返回地图;
}
}
“提取提取数据”与“添加的键”、“清理…”和“返回地图提取地图…”一样打印,但不打印调用方法中的“提取提取的数据”。我没有发现任何可见的异常,只是控制权永远不会被传递回调用方法,我的CPU使用率会急剧上升,直到我杀死它
编辑:我尝试将“return”语句移动到“try”块内部(在“while”之后)和“finally”块之后,没有任何区别。return语句的位置不会影响(缺少)结果
这似乎是一个内存问题,因为人为地将resultset限制在200k行允许它运行,但一旦我超过这个限制 在
fetchExtractData
方法中使用调试器和断点,您应该能够知道引发了什么异常以及原因。而此异常被堆栈中的另一个方法捕获,它可能不会在控制台中打印。我建议减小ResultSet的大小(使用WHERE子句),然后逐步调试它。您正在从finally块返回:@JackFlamp同意该帖子,但由于已恢复一些数据,我相信地图上还是应该有人居住的(一些不完整的数据很可能是基于此中断的位置。Jack Flamp提到的一件事是,您正在从finally返回。我看到的第二件事是,您可能正在使用捕获块中抛出的EJB-EJBException。您是否从EJB调用此方法?如果是的话-但它取决于配置-很可能是调用f这种方法是事务性的,当抛出异常时,若您使用的是有状态会话bean,EJB的状态将回滚。
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;
}
}