我想完成的功能如下:
根据不同数据库建立不同的数据库连接从而得到数据库的一些信息(这些信息都是通过查找数据库中的表得到的)。对于不同的数据库,可能得到的东西不同,如:oracle可能得到表空间名、表名等信息;SQL Server可能得到数据库名和表名等信息。现在怎么能对外部而言提供统一的方法调用反回这些信息?
类怎么设计划分呀?谢谢。
根据不同数据库建立不同的数据库连接从而得到数据库的一些信息(这些信息都是通过查找数据库中的表得到的)。对于不同的数据库,可能得到的东西不同,如:oracle可能得到表空间名、表名等信息;SQL Server可能得到数据库名和表名等信息。现在怎么能对外部而言提供统一的方法调用反回这些信息?
类怎么设计划分呀?谢谢。
从driver里可以区分是什么数据库了。
跨数据库,建议看下HIBERNATE
然后根据不同的数据库去实现这个接口,
然后用工厂模式实现一个统一的用户调用接口
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());
}
除了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
请问这种情况下类应该怎么划分?
然后根据不同的数据库去实现这个接口,
然后用工厂模式实现一个统一的用户调用接口
====================================================================================
我开始也想这么做,但是真对不同的数据库可能实现的方法不同,比如接口中定义方法一二三四五。在Oracle实现类里可能方法三和四没法实现,在SQL Server里可能没法实现方法五。如果不能实现的方法让他们返回空,那么从面向对象的角度来说类设计的就有问题。能用什么方法解决?
然后根据不同的数据库去实现这个接口,
然后用工厂模式实现一个统一的用户调用接口
====================================================================================
我开始也想这么做,但是真对不同的数据库可能实现的方法不同,比如接口中定义方法一二三四五。在Oracle实现类里可能方法三和四没法实现,在SQL Server里可能没法实现方法五。如果不能实现的方法让他们返回空,那么从面向对象的角度来说类设计的就有问题。能用什么方法解决?