所以在我再次提出这个问题之前,我确实尝试检查答案,我在下面的代码中得到一个关闭的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();
}
答案 0 :(得分:1)
结构不合理的异常处理。 ResultSet.next()
循环应位于try
块内。您应该只有一个try
和一个catch (SQLException ...)
。
不要写这样的代码。取决于先前try
块中代码成功的代码应位于try
块内。