匿名内部类形参_匿名内部类_如何调用匿名内部类(3)

电脑杂谈  发布时间:2017-02-06 11:18:13  来源:网络整理

stmt.execute();

ResultSet rs = stmt.getCursor(2);

int i = 0 ;

String strDivision = "";

while( rs.next() )

{

strDivision += rs.getString("DIVISION_ID") + "," ;

}

int length = strDivision.length() ;

if(length != 0 )

{

strDivision = strDivision.substring(0,length - 1);

}

divisionData = StringUtil.split(strDivision, ",") ;

map.put("Division", strDivision ) ;

LoggerAgent.debug("GetHeaderProcess","getDivisionData","getValue + " + strDivision +" " + productId) ;

}catch(Exception e)

{

LoggerAgent.error("GetHeaderData", "getDivisionData",

"SQLException: " + e);

e.printStackTrace() ;

}finally

{

manager.close(stmt);

manager.releaseConnection(conn);

}

这是我们最最常用的一个JDBC编程的代码示例。一个系统有很多这样的查询方法,这段代码一般分作三段:try关键字括起来的那段是用来做查询操作的,catch关键字括起来的那段需要做两件事,记录出错的原因和事务回滚(如果需要的话),finally关键字括起来的那段用来释放连接。

我们的烦恼是:try关键字括起来的那段是变化的,每个方法的一般都不一样。而catch和finally关键字括起来的那两段却一般都是不变的,每个方法的那两段都是一样的。既然后面那两段是一样的,我们就非常希望将它们提取出来,做一个单独的方法,然后让每一个使用到它们的方法调用。但是,try…catch…finally…是一个完整的语句段,不能把它们分开。这样的结果,使得我们不得不在每一个数据层方法里重复的写相同的catch…finally…这两段语句。

既然不能将那些讨厌的try…catch…finally…作为一个公用方法提出去,那么我们还是需要想其他的办法来解决这个问题。不然我们老是写那么重复代码,真是既繁琐,又不容易维护。

我们容易想到,既然catch…finally…这两段代码不能提出来,那么我们能不能将try…里面的代码提出去呢?唉哟,try…里面的代码是可变的呢。怎么办?

既然try…里面的代码是可变的,这意味着这些代码是可扩展的,是应该由用户来实现的,对于这样的可扩展内容,我们很容易想到用接口来定义它们,然后由用户去实现。这样以来我们首先定义一个接口:

public intece DataManager

{

public void manageData();

}

我们需要用户在manageData()方法中实现他们对数据层访问的代码,也就是try…里面的代码。

然后我们使用一个模板类来实现所有的try…catch…finally…语句的功能,如下:

public class DataTemplate

{

public void execute(DataManager dm)


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-30869-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...