我想完成的功能如下:
根据不同数据库建立不同的数据库连接从而得到数据库的一些信息(这些信息都是通过查找数据库中的表得到的)。对于不同的数据库,可能得到的东西不同,如:oracle可能得到表空间名、表名等信息;SQL Server可能得到数据库名和表名等信息。现在怎么能对外部而言提供统一的方法调用反回这些信息?
类怎么设计划分呀?谢谢。

解决方案 »

  1.   

    连接数据库都是相同的啊。除了driver不同。
    从driver里可以区分是什么数据库了。
      

  2.   

    除了driver不同之外,有一部分SQL语句也不同
    跨数据库,建议看下HIBERNATE
      

  3.   

    定义一个接口,包含一个getConnection()方法;
    然后根据不同的数据库去实现这个接口,
    然后用工厂模式实现一个统一的用户调用接口
      

  4.   

    提供个思路,可以把所有的驱动都列出来,写一个连接方法,根据用户所选的数据库类型,把对应的驱动作为参数传进去,进行连接,连接之后得到一个Connection对象(conn) ,可以用下面代码列出表信息,try{
    DatabaseMetaData metaData = conn.getMetaData();
    ResultSet rs = metaData.getTables(null, null, "%", null);
    List allTables = new ArrayList();
    while (rs.next()) {
    String name = rs.getString(3);
    String type = rs.getString(4);
    int i=0;
    if (type.equalsIgnoreCase("TABLE")) {
    allTables.add(name);
    }
    }
    }catch(Exception e){
    System.out.println(e.toString());
    }
      

  5.   

    补充说明:
    除了driver不同之外,SQL也是完全不同的,如:在Oracle里取表名的SQL为:select table_name from user_tables;而在SQL Server中的SQL为:select name from sysobjects where xtype = 'U' and name <> 'dtproperties'。
    而且取的东西也不同,如:在Oracle中,可以取到所有的表空间名;但在SQL Server中没有表空间这个概念,但它能取到数据库名,方法是在master数据库中查询select name from sysdatabases
    请问这种情况下类应该怎么划分?
      

  6.   

    定义一个接口,包含一个getConnection()方法;
    然后根据不同的数据库去实现这个接口,
    然后用工厂模式实现一个统一的用户调用接口
    ====================================================================================
    我开始也想这么做,但是真对不同的数据库可能实现的方法不同,比如接口中定义方法一二三四五。在Oracle实现类里可能方法三和四没法实现,在SQL Server里可能没法实现方法五。如果不能实现的方法让他们返回空,那么从面向对象的角度来说类设计的就有问题。能用什么方法解决?
      

  7.   

    定义一个接口,包含一个getConnection()方法;
    然后根据不同的数据库去实现这个接口,
    然后用工厂模式实现一个统一的用户调用接口
    ====================================================================================
    我开始也想这么做,但是真对不同的数据库可能实现的方法不同,比如接口中定义方法一二三四五。在Oracle实现类里可能方法三和四没法实现,在SQL Server里可能没法实现方法五。如果不能实现的方法让他们返回空,那么从面向对象的角度来说类设计的就有问题。能用什么方法解决?