2016-12-12 2 views
0

Я хочу распечатать результаты таблицы запросов в файле CSV.Java: печать csv на разных столбцах?

Я попытался с помощью этого кода:

PrintWriter csvWriter = new PrintWriter(new File(path + "SqlClient_" + date + ".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(); 

Это то, что я получить:

title1","title2","title3" 
"date1","date2","date3" 
.... 

Это пишут в одном столбце, а я хочу, чтобы написать на другую колонку, что-то вроде:

title1 | title2 | title3 
data1| data2 | data3 | 

Есть специальная команда для разделения строки на разные столбцы?

+0

Если я вас правильно понял, вы хотите столбцы разделены символом '|' вместо ' ""'? –

+0

Ehm no xD xD Персонаж | означает, что у меня другой столбец. – Removed

+0

Итак, если я понимаю вас, ваш файл csv будет выглядеть так: Title1 (один столбец), Title 2 (другой столбец) и т. Д.? –

ответ

-1

Я считаю, что вы можете изменить эту линию на то, что вы думаете, что больше подходит для вас:

row += ",\"" + rs.getString(i) + "\""; 
+0

Не тот же код, который я разместил? – Removed

+0

Да, я просто сказал вам, что вы можете изменить эти значения между rs.getString (i), чтобы быть тем, кем вы хотите быть. – Galeixo

+0

Да, я просто сказал вам, что вы можете изменить эти значения между rs.getString (i), чтобы быть тем, кем вы хотите быть. – Galeixo

0

файлы CSV использовать разделитель, чтобы отделить столбцы, так что я предполагаю, что ваш разделитель будет , (запятая).

Что нужно сделать, это напечатать значение заголовков, разделенных запятой, а затем добавить новый разделитель строк (\n), чтобы создать новый столбец. И то же самое со значениями строк.

Дополнительную информацию об этом можно получить здесь example.

1

Почему бы вам не использовать StringBuilder для этого. Допустим, вы получаете набор результатов со списком типа YourClass из вызова базы данных. Вызовите следующую утилиту и передайте ее автору.

Псевдо код:

public void writeToCSV(FileWriter writer){ 

StringBuilder sb=new StringBuilder(); 
for (YourClass data: yourresultSet){ 

sb.append("\""); 
sb.append(data.getColumn1); 
sb.append"\""; 
sb.append(",\"") 
sb.append(data.getColumn2); 
sb.append("\""); 
sb.append('\n'); //new line after the column 

writer.write(sb.toString()); 
sb.delete(0,sb.length()); 

} 

} 

И чтобы проверить ваш результат

public class ReadCSV{ 

public static void main(String[] args) { 

    String csvFile = "your.csv"; 
    BufferedReader br = null; 
    String line = ""; 
    String cvsSplitBy = ","; 

    try { 

     br = new BufferedReader(new FileReader(csvFile)); 
     while ((line = br.readLine()) != null) { 

      // use comma as separator 
      String[] title= line.split(cvsSplitBy); 

      System.out.println("Columns [Column1= " + title[0] + " , Column2=" + title[1] + "]"); 

     } 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if (br != null) { 
      try { 
       br.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

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