在处理关闭的结果集期间捕获了一个可抛出的异常:下一个
Posted
技术标签:
【中文标题】在处理关闭的结果集期间捕获了一个可抛出的异常:下一个【英文标题】:Caught a throwable exception during processing Closed Resultset: next 【发布时间】:2017-03-30 05:01:26 【问题描述】:所以在我再次提出这个问题之前,我确实尝试过检查答案,我在下面的代码中收到了一个关闭的 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】:结构不良的异常处理。 ResultSet.next()
循环应该在 try
块内。你应该只有一个try
和一个catch (SQLException ...)
。
不要写这样的代码。依赖于先前try
块中代码成功的代码应位于该try
块内。
【讨论】:
同意,代码正在更新,但想了解这里的实际问题是什么?是resultSet为空并给出了关闭的resultset异常还是其他问题? 我想知道您是否发布了真实代码。如果myResultSet
是实例成员而不是局部变量,那么您当前的代码结构将允许您在之前的try
块中的异常之后调用next()
,这意味着您正在重用之前的ResultSet
已经关门了。以上是关于在处理关闭的结果集期间捕获了一个可抛出的异常:下一个的主要内容,如果未能解决你的问题,请参考以下文章