2017-01-03 2 views
-2

루프에서 CSV와 같은 결과를 얻을 수 있으며 내 코드는 다음과 같습니다 각각 aloop.So 결과 집합 인쇄 할 :내가 JDBC 연결에서 얻은 결과 집합을 인쇄 할

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileWriter; 
import java.io.PrintWriter; 

import java.sql.*; 
import java.util.*; 

public class zone { 

    List<model> listOfBlogs; 

    public zone() { 
     Connection conn = null; 
     listOfBlogs = new ArrayList<model>(); 

     // connect to the database 

     conn = connectToDatabaseOrDie(); 

     // get the data 
     populateListOfTopics(conn, listOfBlogs); 

     //print the data 
     printTopics(listOfBlogs); 
    } 

    public List<model> printTopics(List<model> listOfBlogs) { 
     Iterator<model> it = listOfBlogs.iterator(); 
     while (it.hasNext()) { 
      model blog = (model) it.next(); 
      System.out.println(blog.day + " " + blog.hour + " " + blog.zone_id); 
     } 
     return listOfBlogs; 
    } 

    private void populateListOfTopics(Connection conn, List<model> listOfBlogs) { 
     try { 
      for (int j = 9; j < 10; j++) { 
       for (int i = 10; i < 12; i++) { 

        String sql = "SELECT day,hour,zone_id FROM public.zone_block_table where day=? and hour=?"; 
        PreparedStatement pstmt = conn.prepareStatement(sql); 
        pstmt.setInt(1, j); 
        pstmt.setInt(2, i); 

        ResultSet rs = pstmt.executeQuery(); 

        while (rs.next()) { 
         model blog = new model(); 

         blog.day = rs.getInt("day"); 
         blog.hour = rs.getInt("hour"); 
         blog.zone_id = rs.getInt("zone_id"); 

         listOfBlogs.add(blog); 
        } 
        convertToCsv(rs, i, j); 

        rs.close(); 
        pstmt.close(); 
       } 
      } 
     } catch (SQLException se) { 
      System.err.println("Threw a SQLException creating the list of state."); 
      System.err.println(se.getMessage()); 
     } catch (Exception e) { 
      System.out.println("Err"); 
      e.printStackTrace(); 
     } 
    } 

    private Connection connectToDatabaseOrDie() { 
     Connection conn = null; 
     try { 
      Class.forName("org.postgresql.Driver"); 
      String url = "jdbc:postgresql://localhost:5432/mvc_data_base"; 
      conn = DriverManager.getConnection(url, "postgres", "122333"); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
     return conn; 
    } 

    public void convertToCsv(ResultSet rs, int k, int l) throws SQLException, FileNotFoundException { 
     PrintWriter csvWriter = new PrintWriter(new File("state_" + k + "_" + l + ".csv")); 
     ResultSetMetaData meta = rs.getMetaData(); 
     int numberOfColumns = meta.getColumnCount(); 
     String dataHeaders = "\"" + meta.getColumnName(1) + "\""; 
     for (int i = 2; i < numberOfColumns + 1; i++) { 
      dataHeaders += ",\"" + meta.getColumnName(i) + "\""; 
     } 
     csvWriter.println(dataHeaders); 
     while (rs.next()) { 
      String row = "\"" + rs.getString(1) + "\""; 
      for (int i = 2; i < numberOfColumns + 1; i++) { 
       row += ",\"" + rs.getString(i) + "\""; 
      } 
      csvWriter.println(row); 
     } 
     csvWriter.close(); 
    } 
} 

하지만 결과 집합은 인쇄입니다 완벽하게.하지만 목적지에서 생성 된 CSV 파일을 찾을 수 없습니다. 도움을 청했습니다.

+0

이,'새로운 파일을 인쇄 할 것을보십시오. getAbsolutePath()'를 사용하여 위치를 확인합니다. – Berger

+0

'convertToCsv' 메서드를 호출하기 전에 전체 결과 집합을 이미 소비했습니다. 쓸 것이 남아 있습니다. –

+0

그래, 알았어. 결과 세트를 데이터 구조로 취급 할 수 있다고 생각했기 때문에 나는 완전히 틀렸어. 많이 감사합니다. – RKR

답변

0

opencsv를 사용하여 resultset에서 CSV 파일을 만드는 직접적인 방법이 있습니다. ("상태 _"+ K + "_"+ L + ". CSV") 아마 파일이 예상 한 경로에 만들어지지 않습니다

CSVWriter writer = new CSVWriter(new FileWriter(csvtemp), ',' ,CSVWriter.NO_QUOTE_CHARACTER , CSVWriter.NO_ESCAPE_CHARACTER , "\r\n");

writer.writeAll(myResultSet, true); 
writer.close(); 
+0

그래도 작동하지만 제 3 자 라이브러리를 사용하고 싶지 않습니다. 어쨌든 고마워요. – RKR