如果你认为这写的比较弱智,应该进行使用函数,但是你也会大量使用if else。
于是我们进行重构,首先我们学习过DAO模式,就是把数据读取进行分里,我们定义一个共同的接口,它负责数据库的操作,然后根据不同的数据库进行实现,在我们的查询操作中,使用接口,进行操作,这样就可以不用考虑具体的实现,我们只管实现过程。
查询共同接口:
public interface searchDB{
public Vector searchFromDB(String SQL)
}
Oracle数据库的查询实现
public class searchDBOracleImpl{
public Vector searchFromDB(String SQL){
//从总部数据库读取,数据库为Oracle
String connect_string ="jdbc:oracle:thin:hr/hr@localhost:1521:HRDB";
DriverManager.registerDriver (new oracle.jdbc.OracleDriver());
ResultSet rset = stmt.executeQuery (SQL);
.............................
............................
}
}
Sybase数据库的查询实现
public class searchDBSysbaseImpl{
public Vector searchFromDB(String SQL){
//从分公司数据库读取,数据库为Sysbase
String connect_string ="jdbc:sybase:Tds:cai/cai@192.168.1.12:1521:FIN";
DriverManager.registerDriver (new com.sybase.jdbc.SybDriver());
ResultSet rset = stmt.executeQuery (SQL);
.............................
............................
}
}
这样在我们的查询中就可以使用接口searchDB,但是创建有是一个问题,因为我们不能静态的确定,查询的数据库类型,必须动态确定,于是我们又想到使用简单工厂方法,来分别创建这里的具体实现,根据类别,创建
public class searchFactory{
public static searchDB createSearch(int DBType){
if(DBType.equal("oracle")){
return searchDBOracleImpl();
}else if(DBType.equal("sybase")){
return searchDBSysbaseImpl();
}
}
}
于是我们的查询代码可以改变为这样了;
public class SearchAction(){
public Vector searchData(string ActionType,String DbType){
String SQL="";
if(ActionType.equal("查找客户信息")){
//如果是查询客户信息,拼SQL语句从客户表中读取数据
SQL="select * from Customer "
searchDB obj=searchFactory.createSearch(DbType);
return obj.searchFromDB(SQL);
}else if(ActionType.equal("查找帐户信息")){
//如果是查询帐户信息,拼接SQL语句从帐户表中读取数据
SQL="select * from Account "
searchDB obj=searchFactory.createSearch(DbType);
return obj.searchFromDB(SQL);
}
}
}