相关文章
更多最近更新
更多关于两种对象类型使用
2019-03-25 13:43|来源: 网路
直接描述的我的问题了。
我的需求是读取本地或异地的数据,程序中用到ResultSet(本地读取)和DepartResultset(异地读取,自己写的)来获得数据,程序就像这样:
下面再读取时统一用rs变量来读,如
我想问得是前面怎么设置两个不同类型rs, 怎么判断后给他转换个类型,就像如果true用本地rs,false用异地rs,最主要的是保证代码3不用修改。
问题补充:
类被封装了,改不了。
我最简单的想法就是不用
省略部分代码量比较大。
最好就是,
有没有这种方式的实现。
问题补充:
如果本地
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类比较好。但是类被封装起来了。想办法沟通去。谢谢大家!
问题补充:
这个建议很好啊,虽然没做,但是思路比较清晰了,谢谢wangdgsc!
AbstractResulsetSet(抽象类)
|e
|x
|t
|e
|n
|d _____NativeResult {ResultSet rs; method(){return rs;}}
|s |
------|
|
_____UnNativeResult
{DepartResultset rs; method(){return rs;}}
我的需求是读取本地或异地的数据,程序中用到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
另一个实现类使用远程的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;}}
相关问答
更多-
JAVA提供的两种程序类型是什么?[2023-09-23]
java应用程序(application)和Java小应用程序(applet) http://baike.baidu.com/view/150834.htm -
C#比较两种未知类型的对象(包括引用和值类型)(C# compare two objects of unknown types (including reference and value types))[2023-12-31]
您可以使用静态object.Equals(object x, object y)方法,而不用烦恼编写方法。 这将适当地处理null,并委托object.Equals(object) x或y相关联的object.Equals(object)的实现...因为Equals意在对称,所以不应该是重要的。 请注意,这不会使用任何类型的==运算符 - 运算符不能被覆盖,只能重载(这意味着它们在编译时被选择,而不是执行时间) 。在大多数情况下, Equals应该做你想要的在某些情况下,即使Equals被覆盖,==也可能不 ... -
比较两种类型(Comparing two class types)[2023-01-15]
使用typeof : if (mediaTitleColection[i].GetType()==typeof(Catalog.FilmMedia) Use typeof: if (mediaTitleColection[i].GetType()==typeof(Catalog.FilmMedia) -
处理两种文件类型(Handling two document type)[2022-04-16]
在询问Apple Developer对它的支持后, DocumentType仅针对编辑文档(在我的情况下为SRT)。 我处理资产(视频文件)的方式是正确的方法! After questionning Apple Developer support about it, DocumentType is only designed for the editing document (SRT in my case). The way I handle my asset (video file) is the pro ... -
它不是真的与Scala有关,它更像是一个ieee-754浮点算术问题。 首先,在比较Int和Double它会将Int为Double (总是安全)。 第二种情况很明显 - 价值观不同。 第一种情况发生的情况是, Double类型不能存储多个有效数字(在你的情况下为17,64位浮点数可以存储多达16个十进制数字),因此它将值舍入为1 。 和1 == 1 。 It is not really Scala related, it is more of a ieee-754 floating-point arithm ...
-
您可以定义一个名为Ageable和Employee的接口,Person可以实现此接口。 您也可以定义一个抽象类(并且Employee和Person将从抽象类继承),具有相同的效果。 请注意,由于这个原因你也可以使用一个普通的类,你可以做任何你需要的。 另外,如果没有理由说雇员不是一个人(例如机器人在办公室工作),那么Employee可以从Person继承。 You can define an interface called Ageable and Employee and Person can imple ...
-
两种使用自己的类型(Two types that use themselves)[2022-02-28]
将这两种类型放在同一个文件中,并将定义更改为以下内容: type ShopResult(someContext: ShoppingContext) = //some logic member this.GoTo shopName = new ToDoResult(someContext) and ToDoResult(someContext: ShoppingContext) = //some logic member this.Buy what = new ShopRe ... -
两者都没有 - 我实现了两个单独的方法,一个用于数组,一个用于字典: - (void)addObjectToArray:(NSMutableArray *)anArray; - (void)addObjectToDictionary:(NSMutableDictionary *)aDictionary; 它比它更简单,更可测试,更易于维护 一种具有尴尬签名和不明确行为的方法,具体取决于其参数(例如,当参数nil或两者都不nil时会发生什么?); 要么 一种弱类型的方法,它接受任何随机的Objective- ...
-
如果你知道你只有两种类型,而且这个数字在将来不会增长,那么C-ish标记的联合就足够了并且易于使用: struct PatternMatch { int length; int indexInDict; }; struct NoMatch { std::string rawChars; }; struct TaggedUnion { enum { MATCH, NO_MATCH } flag; union { PatternMatch match; NoMatch n ...
-
如果我理解你的话: let myObject: { [key: string]: ISimpleListItem } = { "key1": { index: 1, item: "something", selected: true } }; ( 游乐场代码 ) 编辑 联合类型是它自己的一种类型,你不能将它视为联合中的一种类型而不让编译器知道你引用的类型。 有几种方法可以做到这一点: (1) 类型断言 function getit(): st ...