动态对象怎么定义?

deco2472 2009-04-02 11:26:22
比如我现在要传过一条SQL语句去查询,一般情况下得到rs了,直接while(rs.next()){
ttt t = new ttt();//对象
t.setID() = rs.getInt(1);
t.setName = rs.getString(2);
...
all.add(t);
}
然后在循环这list all就行了,可现在这个ttt对象定不了,不知道查那个表呢,要定义一个动态的对象,怎么定义?

...全文
174 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
guoapeng 2009-04-03
  • 打赏
  • 举报
回复
楼主就爱画蛇添足,明明ResultSet 是一个很好用的集合,你非要转成list, ResultSet 不能直接用吗?
你实在要把关系型数据转换成对象型数据,而且是通用的话,自己实现没有那么简单,不过你可以采用现成的解决方案,
ibatis 或hibernate 。
our651 2009-04-03
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 squallking007 的回复:]
引用 13 楼 our651 的回复:
此需求能用反射实现吗?有觉得可以的人请讲具体些吧。
在我看来反射和这个需求没有任何关系。


如果你定义的DTO名跟物理表名有一定的关系,

那就可以通过你检索的SQL语句中找出你要检索的表名,利用反射,可以生成这个表所对应的DTO实例,进行set。
[/Quote]
明白你们的意思了,这样的话,需要对每个表建立一个相应的类。动态决定初始化哪个类。
我还以为,你们要根据查询的表,动态的定义一个类然后初始化。
squallking007 2009-04-02
  • 打赏
  • 举报
回复
反射机制+抽象工厂模式可以解决
squallking007 2009-04-02
  • 打赏
  • 举报
回复
反射机制+抽象工厂模式
qhfu 2009-04-02
  • 打赏
  • 举报
回复
用反射 能实现你的要求,但是要考虑一下是不是真的需要这种灵活性
xinglongjian 2009-04-02
  • 打赏
  • 举报
回复
我说一下我的理解,你是想定义一个ttt对象,然后将从数据库中查出来的对象的属性值分别附值,将ttt添加到list集合中,在遍历list是把,

如果是这样的话 你可以定义一个java Bean对象,Ttt.java类,将数据库表的字段值作为这个类的属性值,添加getter和setter方法 就可以实现了
deco2472 2009-04-02
  • 打赏
  • 举报
回复
=下啊,还有个问题while(rs.next()){
List t = new ArrayList();
t.add(rs.getInt(1));
t.add(rs.getString(2));
...
all.add(t);
}

这里面的t.add(rs.getInt(1));
t.add(rs.getString(2));
...这些我不知道是几个,没准是几个呢,要看你传过来的sql语句要查几个字段呢,怎么写?
deco2472 2009-04-02
  • 打赏
  • 举报
回复
谢了!我看看
chinahack521 2009-04-02
  • 打赏
  • 举报
回复
明白了
用数组实现
while(rs.next()){
List t = new ArrayList();
t.add(rs.getInt(1));
t.add(rs.getString(2));
...
all.add(t);
}
chinahack521 2009-04-02
  • 打赏
  • 举报
回复
动态对象 一般是用反射实现的 class.forName("包名"+类名).newInstance(); 一般是抽象工厂

Gao_TF 2009-04-02
  • 打赏
  • 举报
回复
是不是不同的表要生成不同的对象?如果是,如果表少(一个两个的)那就直接switch case写吧!如果多,那你可以提取其公共的特性,做些辅助类,采用构造模式(简单工厂、工厂方法、抽象工厂)来实现吧
our651 2009-04-02
  • 打赏
  • 举报
回复
用数组好了:

while(rs.next()){
List t = new ArrayList();//对象
t.add(rs.getInt(1));
t.add(rs.getString(2));
...
all.add(t);
}

不过说实话,不知道你想搞什么
wanglingzhong 2009-04-02
  • 打赏
  • 举报
回复
说一下我的理解,楼主应该是想将rs这个ResultSet结果集中的元组存储起来吧,因为要查询的sql语句可能要查找多个属性值,所以要定义一个类并且因为有可能返回多个元组,所以得建立这个类的对象数组。但不是建立容器ArrayList。
你定义的ttt.java完全可以包含该对象或者说你的数据表中的所有属性及相应的方法,因为一般SQL语句在jsp中是固定的,即使要动态输入,也应该能提取它的属性名。
这是我的理解,希望大家指正
squallking007 2009-04-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 our651 的回复:]
此需求能用反射实现吗?有觉得可以的人请讲具体些吧。
在我看来反射和这个需求没有任何关系。
[/Quote]

如果你定义的DTO名跟物理表名有一定的关系,

那就可以通过你检索的SQL语句中找出你要检索的表名,利用反射,可以生成这个表所对应的DTO实例,进行set。




our651 2009-04-02
  • 打赏
  • 举报
回复
此需求能用反射实现吗?有觉得可以的人请讲具体些吧。
在我看来反射和这个需求没有任何关系。
our651 2009-04-02
  • 打赏
  • 举报
回复

while(rs.next()){
List t = new ArrayList();
int count = rs.getFetchSize();
for(int i=1;i>=count;i++)
//因为你什么都不确定,你不能使用getInt,因为可能根本就不是int
t.add(rs.getString(i));
all.add(t);
}
deco2472 2009-04-02
  • 打赏
  • 举报
回复
发表于:2009-04-02 12:22:177楼 得分:0
我说一下我的理解,你是想定义一个ttt对象,然后将从数据库中查出来的对象的属性值分别附值,将ttt添加到list集合中,在遍历list是把,

如果是这样的话 你可以定义一个java Bean对象,Ttt.java类,将数据库表的字段值作为这个类的属性值,添加getter和setter方法 就可以实现了


我就是想做一个ttt.java类,现在问题就是你还不知道从数据库查处的是什么字段名呢,所以你这个类的属性值页定不了,就更别提get set方法了

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧