【问题标题】:jdbc Mysql nested resultsetjdbc Mysql 嵌套结果集
【发布时间】:2016-04-30 08:41:56
【问题描述】:

见下文。 rs.getString("tags") 是多于 1 行的子查询。我想迭代那个子查询(rs.getString("tags") ---- Like rs.next().

while (rs.next()) {

        emailDto emaildto = new emailDto();         

        emaildto.setMid(rs.getInt("id"));
        emaildto.setSub(rs.getString("sub"));
        emaildto.setMessage(rs.getString("message"));

         while(rs.getString("tags").next()){

            arrtags[i] = rs.getString(1);
         }

        emaildto.setTags(arrtags);

rs.getString("tags") 不起作用 --- 包含超过 1 行。如何提取它。有什么技巧吗?

【问题讨论】:

  • 请分享更多代码,至少是您正在使用的查询。
  • 嗨米克,这是我的完整代码。见下文

标签: java mysql resultset


【解决方案1】:

试试这样的:

数组 tagsArray = rs.getArray("tags"); String[] 标签 = (String[])tagsArray.getArray();

【讨论】:

    【解决方案2】:

    这不是答案。这是完整的代码

    列出电子邮件 = new ArrayList();

        String listQuery = "select mid, sub, message, "
        + " (select emailid from sub_ids where sub_ids.messageid= sub_mail_list.mid )  //  this query fetch more than one row. 
    

    作为 refid" + "来自 sub_mail_list";

        PreparedStatement ps = null;
        ResultSet rs;
        try {
    
            ps = DatabaseConnectionUtil.getConnection().prepareStatement(
                    listQuery);
    
    
    
             rs = ps.executeQuery(listQuery);
    
            while (rs.next()) {
                emailDto emaildto = new emailDto();         
    
                emaildto.setMid(rs.getInt("mid"));
                emaildto.setSub(rs.getString("sub"));
                emaildto.setMessage(rs.getString("message"));
    
                Array tagsArray =  rs.getArray("refid");
    
            List<vtbDto> vtbdtosvr = new ArrayList<vtbDto>();
    
    
    
            int[] tags = (int[])tagsArray.getArray();
    
                for (int i = 0; i < tags.length; i++) {
    
    
                    vtbDto vtbdto = new vtbDto();
    
    
    
                    vtbdto.setRefid(tags[i]);
    
                    vtbdtosvr.add(vtbdto);
    
                }
    
    
    
    
    
    
    
                emaildto.setAr(tagsArray);
    
                emails.add(emaildto);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            DatabaseConnectionUtil.closeAll(ps);
        }
    
        return emails;
    

    这是打印功能的代码

    列出 emailDtos = emaildao.getAllemails();

                for (emailDto emailDto2 : emailDtos) {
    
                      System.out.println( emailDto2.getMid());
                      System.out.println( emailDto2.getSub());
                      System.out.println( emailDto2.getMessage());
    
    
    
                      List<vtbDto> vtbdtos= emailDto2.getVtbdtolst();
    
    
                      for (vtbDto vtbdto2 : vtbdtos) {
                          System.out.print(vtbdto2.getRefid() + ", ");
                      }
    
    
                   }
    

    并且控制台打印“子查询返回超过 1 行”;

    【讨论】:

      猜你喜欢
      • 2013-06-18
      • 1970-01-01
      • 2015-06-23
      • 2011-05-17
      • 2019-08-26
      • 2011-11-21
      • 2011-09-20
      • 2011-01-31
      • 2014-08-24
      相关资源
      最近更新 更多