Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java不返回映射_Java - Fatal编程技术网

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;
    }
}