有这样的DAO+工厂..不知道是否可行??

03-12-14 yast

一个简单工厂在调用的时候:

AnyDB db = FactoryDB.getInstance().getDB("oracle");

Connection db.getConnection();

AnyDB是个接口,getDB方法是这样写的:

public static AnyDB getDB(String dbname)

{

if(dbname.equals("oracle"))

{return new oracleDAO();}

else if (dbname.equals("mysql")){

return new mysqlDAO();

}

}

工厂类中根据传的参数创建用哪个数据库,如上面,传ORACLE的时候,创建ORACLE的对象,取连接当然也是ORACLE的..

如果很多方法或类都用上面的调用取连接,假如一天突然改用MSYQL,那么我们就得把oracle改成MYSQL..不是很麻烦?,于是我在工厂里加了个方法:

public Connection getDBConnect()

{

if(dbname.equals("oracle"))

{...}

else if (dbname.equals("mysql")){}

..这个dbname是个String 可以在任何地方设置,如果这样的话,我们调用时候直接Factory.getInstance().getDBConnect()..这样即使变成不同数据库的时候,都只需要改变这个类的dbname变量就行了吧???

不知道这种方法是否可行?

banq
2003-12-16 22:00

不错,是一个好的工厂模式应用.

其实,不必外界指定DbName,直接系统可以自己判断是什么数据库

 DatabaseMetaData metaData = con.getMetaData();
      // Supports transactions?

      // Get the database name so that we can perform meta data settings.
      String dbName = metaData.getDatabaseProductName().toLowerCase();
      String driverName = metaData.getDriverName().toLowerCase();

<p>