关于两种对象类型使用

2019-03-25 13:43|来源: 网路

直接描述的我的问题了。
    我的需求是读取本地或异地的数据,程序中用到ResultSet(本地读取)和DepartResultset(异地读取,自己写的)来获得数据,程序就像这样:
本地:代码一
conn = DBUtil.getConnection();
                Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                        ResultSet.CONCUR_UPDATABLE);
                ResultSet rs = null;
                rs = stmt.executeQuery(sql); 


异地:代码二
UnNativeDataSource ds = (UnNativeDataSource) DataSourceFactory.create(DataSourceTypes.UNNATIVETYPE);
			 DepartResultset rs = null;
			
			 rs = ds.exec(this.postCode,sql);
			 rs.first(); 


下面再读取时统一用rs变量来读,如
代码三:
if (rs.next()) {
   
我想问得是前面怎么设置两个不同类型rs, 怎么判断后给他转换个类型,就像如果true用本地rs,false用异地rs,最主要的是保证代码3不用修改。       
问题补充:
类被封装了,改不了。
我最简单的想法就是不用
if(本地)
   if(rs.next)
     ...
else if(异地)
   if(rs.next)
     ...


省略部分代码量比较大。
最好就是,
Object rs = null;
        if(本地)
           rs = 本地
          else
           rs = 异地
   
      然后if(rs.next)
         ...

有没有这种方式的实现。
问题补充:
如果本地
Connection conn = DBUtil.getConnection();  
                Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,  
                        ResultSet.CONCUR_UPDATABLE);  
                ResultSet rs = null;  
                rs = stmt.executeQuery(sql); 

/*
如果异地
UnNativeDataSource ds = (UnNativeDataSource) DataSourceFactory.create(DataSourceTypes.UNNATIVETYPE);  
             DepartResultset rs = null;          
             rs = ds.exec(this.postCode,sql);  
             rs.first();  
*/


if(rs.next()){
  ...
}

我要做的是就是把注释的这段也实现出来,这样会不会清楚些。
问题补充:
public void test(boolean isNative, Object obj){
if(flag)
rs = (ResultSet)Obj;
else
rs = (DepartResultset)Obj;
if(rs.next)        ...
}

wangying95599 的做法试过,rs很难定义,定义成Object,它没有.next()方法;定义成ResultSet/DepartResultset,似乎不行。
最好的做法我想还是异地操作类继承ResultSet类比较好。但是类被封装起来了。想办法沟通去。谢谢大家!
问题补充:
引用
使用组合啊,你自定义一个类,做为抽象类,再下面搞两个实现类,一个实现类使用本地的ResultSet做为内在属性,然后覆盖它的某一些方法
另一个实现类使用远程的ResultSet做为内在属性,然后覆盖它的某一些方法,不就可以了吗?不需要去改已经封装好的代码,当然,这个方法也只能说是权宜之计,考虑一下,
wangdgsc (初级程序员) 2009-09-21


这个建议很好啊,虽然没做,但是思路比较清晰了,谢谢wangdgsc!
AbstractResulsetSet(抽象类)
|e
|x
|t
|e
|n
|d    _____NativeResult {ResultSet rs; method(){return rs;}}
|s    | 
------|
      |
      _____UnNativeResult
           {DepartResultset rs; method(){return rs;}}

相关问答

更多