在处理Closed Resultset期间捕获了一个throwable异常:next

时间:2017-03-30 05:01:26

标签: exception jdbc resultset

所以在我再次提出这个问题之前,我确实尝试检查答案,我在下面的代码中得到一个关闭的ResultSet异常。 在测试一小组记录时,相同的代码适用于开发环境。但是在QA环境中,查询也会遇到200-300条记录的异常。 我的问题是,如果没有关闭语句或关闭连接代码,为什么在下面的代码中的While循环中抛出关闭的结果集异常?

public void extractRecordsAndUpdateData() throws Throwable {
    ConnectionManager mgr =null;

    /*
    * Some authentication code here for user authentication to allow access in the application
    */

    Connection c = null;
    try {
        mgr = mServiceLocator.getConnectionManager();
    }
    catch (Exception newex) {
        newex.printStackTrace();
        customLogWriter.logEntry("Got a Exception during authentication " + newex.getMessage());
    }

    PreparedStatement pSql = null;
    ResultSet myResultSet = null;

    try {
        c = mgr.getConnection(mgr.getSiteName());
        pSql = c.prepareStatement(extractSQL); // extractSQL is a simple select statement fetching records from DB to be processed in the while loop below.
        myResultSet = pSql.executeQuery();

    }catch(SQLException ex){customLogWriter.logEntry("Error " + ex.getMessage());}

    List<List> outerList=new ArrayList<List>();
    while (myResultSet.next())  // Exception encountered on this line of code
    { 
        /*Do some processing*/
    }

    customLogWriter.close();
}

1 个答案:

答案 0 :(得分:1)

结构不合理的异常处理。 ResultSet.next()循环应位于try块内。您应该只有一个try和一个catch (SQLException ...)

不要写这样的代码。取决于先前try块中代码成功的代码应位于try块内。