方法可能因为checked exception导致清理流或资源失败

方法可能因为checked exception导致清理流或资源失败

资源库: findbugs    关键字: OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE

This method may fail to clean up (close, dispose of) a stream, database object, or other resource requiring an explicit cleanup operation.
In general, if a method opens a stream or other resource, the method should use a try/finally block to ensure that the stream or resource is cleaned up before the method returns.

 

This bug pattern is essentially the same as the OS_OPEN_STREAM and ODR_OPEN_DATABASE_RESOURCE bug patterns, but is based on a different (and hopefully better) static analysis technique. See Weimer and Necula, Finding and Preventing Run-Time Error Handling Mistakes, for a description of the analysis technique. .

 

问题类似于:

 

不良实践 - 方法可能在关闭database资源时失败

 

The method creates a database resource (such as a database connection or row set), does not assign it to any fields, pass it to other methods, or return it, and does not appear to close the object on all paths out of the method.  Failure to close database resources on all paths out of a method may result in poor performance, and could cause the application to have problems communicating with the database.

 
资源库: findbugs     关键字: ODR_OPEN_DATABASE_RESOURCE
 

 

解决办法:

/**
	 * 关闭数据库资源方法
	 * @param con
	 * @param ps
	 * @param rs
	 */
	public static void closeResources (Connection con, PreparedStatement ps,ResultSet rs){
		try {
			if (rs != null) {
				rs.close();
			}
		} catch (SQLException e) {
			LOG.error("释放ResultSet出错", e);
		} finally {
			try {
				if (ps != null){
					ps.close();
				}
			} catch (SQLException e) {
				LOG.error("释放PreparedStatement出错", e);
			} finally {
				if (con != null) {
					try {
						con.close();
					} catch (SQLException e) {
						LOG.error("释放Connection出错", e);
					}
				}
			}
		}
	}

 

 

你可能感兴趣的:(Sonar,findbugs)