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

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

资源库: findbugs  Sep12  关键字: 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   Sep12  关键字: 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);
					}
				}
			}
		}
	}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值