2010-04-08 121 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

相關問題