有两张表:bookinfo(包含bookid,bookname,author,catename(外键)等字段);
                  categroyinfo(包含cateid,catename等字段);现要在一个jsp页面的table表中显示两张表的内容。
我分别建了两个bean,获得了两个list,可是不好在<c:foreach>中遍历。
要怎么将两张表中查询的内容放到一个list中?
或者别的解决思路是什么。

解决方案 »

  1.   

    持久层用的JDBC的话直接连接查询不就得了,
    如果是hibernate,bookinfo 中可以包含一个categroyinfo的bean不就可以了吗?
      

  2.   

    在bookinfo这个bean可以写一个categroyinfo的对象属性,或者写一个catename,为String类型!
    不知道你的持久层用的什么。如果不是JDBC那就是在bookinfo中声明一个categroyinfo对象属性并提供get/set
    不需要两个bean、list。显示的时候就遍历一个就可以了!
      

  3.   

    在bookinfo里面声明categroyinfo对象属性后,dao里面怎么操作,麻烦把大概框架给我写下,学习之中
      

  4.   

    你SQL是怎么写的嘛?贴出来...
    你是用的JDBC还是什么?说清楚点嘛...
      

  5.   

    在service层调用的时候 全放到LIST里面去不就好了吗。
     如果用hibernate更加简单,直接点属性不就完了吗。
      

  6.   

    public class BookinfoDao {
    Bookinfo bto = new Bookinfo(); public List<Bookinfo> selectR() {
    List<Bookinfo> lst = new ArrayList<Bookinfo>();
    Connection conn = null;
    PreparedStatement pStatement = null;
    ResultSet rs = null;
    try {
    String sql = "select bookid,bookname,author,count,cateid,reco from bookinfo";
    conn = DBConnection.getConnection();
    pStatement = conn.prepareStatement(sql);
    rs = pStatement.executeQuery(sql);
    while (rs.next()) {
    Bookinfo bto = new Bookinfo();
    bto.setBookId(rs.getInt(1));
    bto.setBookName(rs.getString(2));
    bto.setAuthor(rs.getString(3));
    bto.setCount(rs.getInt(4));
    bto.setCateId(rs.getInt(5));
    bto.setReco(rs.getInt(6));
    lst.add(bto);
    } } catch (Exception e) {
    e.printStackTrace();
    } return lst;
    } public List<Bookinfo> selectR(boolean isgetCate) {
    List<Bookinfo> lst2 = selectR();
    if (!isgetCate) {
    return lst2;
    }
    CateinfoDao dao = new CateinfoDao();
    Categroyinfo dto = new Categroyinfo();
        List<Categroyinfo> clist=new ArrayList<Categroyinfo>();
    //     clist=dto.setCateId(dao.selectById(dto.getCateId()));
    // bto.setList(clist);
    // lst2.add(bto);
    // return lst2;
    }
    }
      

  7.   

    select book.bookid,book.bookname,book.author,book.count,book.cateid,book.reco,cate.catename  from bookinfo as book inner join categroyinfo as cate on book.cateid = cate.cateid
    把你的SQL改成以上SQL。
    然后在Bookinfo 中添加一个private String cateName;//提供getter/setter
    bto.setCateName(rs.getString("catename"));
    这样就完了,显示就不用我说了!
      

  8.   

    sql语句这样写可以查出来(得去掉as,不然提示sql语句未正确结束,不知为何)
    但我更想知道,在bookinfo里面定义了categroyinfo属性后,怎么实现。!!!
    还有public List<Categroyinfo> selectXx(){} 以及public List<Bookinfo> selectR() {}这样定义的语法是什么意思,麻烦给我大概讲一下
      

  9.   

    得去掉as ,这个就要看你是用的什么数据库了!不过我写的在SQL Server和MySQL是可以的呀!
    你的意思是说,你在bookinfo中声明:
    private Categroyinfo cate;//提供getter/setter方法
    是这样吗?如果是这样,那么显然,调用setCate()时要传一个Categroyinfo 对象,那么怎样它填充进去呢?这里用hibernate非常好实现,用JDBC就麻烦了,你要做以下操作:
    Categroyinfo cate = new Categroyinfo();
    cate.setCateName(rs.getString("catename"));
    bto.setCate(cate);
    这样,不就比直接在bookinfo中定义一个String cateName复杂多了吗?public List<Categroyinfo> selectXx(){} 以及public List<Bookinfo> selectR() {}
    这不是你自己定义的方法吗?List<Categroyinfo>,表示这个方法返回的是一个List类型,我们知道list里可以存任何对象,即Object对象!你的定义是指,这个方法里的list只能够存Categroyinfo对象,否则编译有错!明白了吧,那么后面的也就一样咯...