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条)

报告相同问题?

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站