2010-04-08 1 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 ResultSet записи в таблице 3. "rs2" содержит 5 ResultSet записи в таблицепроблема с циклом при добавлении данных в существующий текстовый файл

"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

+1

Это будет выводить первый столбец в первый раз, а затем «» для каждого момента после этого, если предположить, что \ t разделитель, что вы хотите поместить в первый столбец для последующих записей? –

+0

, если есть какие-либо «данные» из базы данных, он должен поместить это или пустое место в первом столбце – Manu

0

Вы должны присоединиться к трем таблицам, используя общий столбец (часто называемый внешним ключом). Значения в таблицах trip2 и trip3 говорят, к какой записи они относятся в таблице 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 отдельно (в противном случае это приведет к некоторой утомительной проблеме в моем приложении) .so я не мог " t присоединитесь к запросу. – Manu

+0

В этом случае вы должны эмулировать соединение с помощью пары «HashMap». Не забудьте заказать все записи одним и тем же ключом! –

0

Логика здесь ошибочна. Если вы получите только один результат в rs2, вы увидите только одну строку, так как ваш while(rs2.next()) будет ложным после того, как вы его пропустите один раз. Один из вариантов - перебрать все ваши результирующие наборы, поместить значения в массивы и затем перебрать их, чтобы поместить строки в ваш файл. Лучшим решением, как это указано @Aaron Digulla, было бы вернуть только одну из ResultSet из вашей базы данных.

Смежные вопросы