2010-04-08 71 views
-1
 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 

输出我需要什么东西在我的代码改变..请意见

回答

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(); 

      } 
     } 
    } 
+0

@Dean ...我已经试过这个one.this不工作 第一行打印正确,但从第二行“第二列数据由于第一列为空白而移动到”第一列“位置” – Manu 2010-04-08 12:59:09

+1

这将首先输出第一列,然后每次输出“”,假设\ t分隔符,你想在后续记录的第一列中放什么? – 2010-04-08 13:31:09

+0

如果存在数据库中的任何“数据”,它应该在第一列 – Manu 2010-04-08 14:41:48

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))发生更改时才打印。

+0

@ Aaron中放置该空间或空白空间..其必须单独运行3个查询(否则会导致我的应用程序中出现一些繁琐的问题)。因此, t加入查询。 – Manu 2010-04-08 13:01:58

+0

在这种情况下,您必须使用几个'HashMap'来模拟连接。不要忘记用同一把钥匙来订购所有记录! – 2010-04-08 13:55:41

0

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