xindongyinfu 2009-01-16 10:19
浏览 321
已采纳

1对多关系如何写JDBC

我的后台有两张表是一对多的 也就是一个是汇总的一个是明细的。
我以前用hibernate做的在java类里写两个bean一个里面通过集合引用另外一个,
但现在用JDBC不知道怎么做。比如在做查询的时候
[b]问题补充:[/b]
[quote]一个SQL,直接关联两张表; 不就可以了?[/quote]
不行啊这样会有重复的部分啊?
class:
public class A{
String ID
String name
String age
String sex
List B
}

public class B{
String telphone;
String area;
String Date;
}
例如:
关联出来的数据是
ID 姓名 年龄 性别 电话 地址 时间
A1 李四 23 男 67676767 北京西路78号 20080808
A1 李四 23 男 70987655 天津南路8号 20090115

前面的汇总的那部分不是重复了吗。

[b]问题补充:[/b]
由于服务器是weblgic8.0所有jdk只能用1.4的 不知道1.4支持不支持rowset
[b]问题补充:[/b]
[quote]然后根据,RowSet组合对象,不就可以了?[/quote]

能不能给个小demo 我没用过这个东西,
才疏学浅 指点一二。
[b]问题补充:[/b]
好像1.4 不支持啊
CachedRowSet crs = new CachedRowSetImpl();
我用这个它报错。
[b]问题补充:[/b]
[quote]Java代码
Connection myConn;

//获取连接

Statement mystmt=myConn.createStatement();

//建立结果集

String sql = "select t1.id t2.telephone,t2.area from tableA t1, tableB t2 where t1.id=t2.id";

ResultSet myrs=mystmt.executeQuery(sql);

A a = new A();

List bList = new ArrayList();

while(myrs.next()){

B b = new B();

a.setId(myrs.getString("id"));

b.setTel(myrs.getString("telephone"));

b.setArea(myrs.getString("area"));

bList.add(b);

}

Connection myConn;
//获取连接
Statement mystmt=myConn.createStatement();
//建立结果集
String sql = "select t1.id t2.telephone,t2.area from tableA t1, tableB t2 where t1.id=t2.id";
ResultSet myrs=mystmt.executeQuery(sql);

A a = new A();
List bList = new ArrayList();
while(myrs.next()){ 
 B b = new B();
 a.setId(myrs.getString("id"));
 b.setTel(myrs.getString("telephone"));
 b.setArea(myrs.getString("area"));
 bList.add(b);
}

Google上也很多;上面的你参考下;[/quote]

这样写行吗!这不正是我想要解决的问题吗
[b]问题补充:[/b]
[quote] ID 姓名 年龄 性别 电话 地址 时间
A1 李四 23 男 67676767 北京西路78号 20080808
A1 李四 23 男 70987655 天津南路8号 20090115
A2 张三 28 女 9878762 天津南路80号 20080909
A2 张三 28 女 9878762 上海南路80号 20080920
[/quote]

如果数据是这样呢?
[b]问题补充:[/b]
[quote]Map aMap = new HashMap();

List bList = new ArrayList();

while(myrs.next()){

B b = new B();

String userid = myrs.getString("id");

if(aMap.get(userid)==null){

A a = new A();

a.setId(myrs.getString("id"));

aMap.put(userid,a);

}

A a = (A)aMap.get(userid);

b.setTel(myrs.getString("telephone"));

b.setArea(myrs.getString("area"));

a.bList.add(b);

aMap.put(userid,a);

} [/quote]

hibernate也是通过这种方式来做的吗。

  • 写回答

8条回答 默认 最新

  • bohemia 2009-01-16 13:16
    关注

    Hibernate做法做了封装. 最后的结果已经是对象了.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?