最近,我在JDBC主题中遇到了引发异常的问题。
我使用2个同步方法同步了Connection对象:getConnection()和releaseConnection()。然后是另一种从数据库中删除行的方法,如下所示:
public void removeItem(int itemID) throws ItemNotFound {
PreparedStatement ps = null;
String query = "DELETE * FROM Student.Book WHERE id = ?";
getConnection();
try {
ps = con.prepareStatement(query);
ps.setInt(1, bookID);
ps.executeUpdate();
} catch (SQLException sqle) {
this.close(null, null, ps); // method to close PreparedStatement and ResultSet
releaseConnection();
throw new BookNotFoundException("Book not found!");
} finally {
this.close(null, null, ps);
releaseConnection();
}
}
如果没有异常,一切都会很好。如果发生异常,则在releaseConnection()方法之后的catch块中,抛出新的BookNotFoundException(“找不到书!”)挂断!如果我评论releaseConnection()方法,那么它会正常抛出吗?
最佳答案
您要释放连接两次。即使运行finally
块,catch
块也将始终运行。我的猜测是先执行throw
,然后运行finally
块,该块试图再次释放连接。我不确定您是如何实现releaseConnection()
的,但是如果在释放连接时阻止了该操作,则可以解释问题。
我认为,如果只是从catch块中删除close
和releaseConnection
,它应该可以正常工作。