将数据附加到现有文本文件时循环问题

时间:2010-04-08 12:41:00

标签: java

     try {
     stmt = conn.createStatement();
     stmt1 = conn.createStatement();
     stmt2 = conn.createStatement();
     rs = stmt.executeQuery("select cust from trip1");
     rs1 = stmt1.executeQuery("select cust from trip2");
     rs2 = stmt2.executeQuery("select cust from trip3");
      File f = new File(strFileGenLoc);
      OutputStream os = (OutputStream)new FileOutputStream(f,true);
      String encoding = "UTF8";
      OutputStreamWriter osw = new OutputStreamWriter(os, encoding);
      BufferedWriter bw = new BufferedWriter(osw);


 }


       while ( rs.next() ) {

         while(rs1.next()){

              while(rs2.next()){

         bw.write(rs.getString(1)==null? "":rs.getString(1));
             bw.write("\t");
         bw.write(rs1.getString(1)==null? "":rs1.getString(1));
         bw.write("\t");
         bw.write(rs2.getString(1)==null? "":rs2.getString(1));
         bw.write("\t");

         bw.newLine();

              }
         }
     }

以上代码正常工作。  我的问题是    1.“rs”结果集在表中包含一条记录    2.“rs1”结果集在表中包含5条记录    3.“rs2”结果集在表中包含5条记录

“rs”数据正在递归。

在写入同一文本文件时,我得到的输出

1   2    3
1   12   21
1   23   25
1   10   5
1   8    54

但我需要输出如下

1   2    3
   12   21
   23   25
   10   5
    8    54

我需要在代码中更改哪些内容..请提供建议

3 个答案:

答案 0 :(得分:0)

这有帮助吗?

while ( rs.next() ) {

     bw.write(rs.getString(1)==null? "":rs.getString(1));

     while(rs1.next()){

          while(rs2.next()){        
              bw.write("\t");
              bw.write(rs1.getString(1)==null? "":rs1.getString(1));
              bw.write("\t");
              bw.write(rs2.getString(1)==null? "":rs2.getString(1));
              bw.write("\t");

              bw.newLine();

          }
      }
  }

答案 1 :(得分:0)

您必须使用公共列(通常称为外键)加入这三个表。表trip2trip3中的值表示它们属于表trip1中的哪个条目。然后你可以这样做:

select t1.cust, t2.cust, t3.cust
from trip1 t1 
  join trip2 t2 on t1.id = t2.trip1_id
  join trip3 t3 on t1.id = t3.trip1_id
order by t1.id

现在,您将在单个结果集中获得所有结果。要获得所需的输出,请仅在更改时打印第一列(rs.getString(1))。

答案 2 :(得分:0)

这里的逻辑是有缺陷的。如果您只在rs2中获得一个结果,那么您只会显示一行,因为在您运行一次后while(rs2.next())将为false。一种选择是迭代所有结果集,将值放入数组中,然后迭代它们以将行放到文件中。正如@Aaron Digulla所暗示的更好的解决方案是从数据库中只返回一个ResultSet