2015-10-05 62 views
0

我正在使用Java將數據庫查詢寫入CSV文件。我該怎麼做才能循環查詢的結果,以便在CSV文件中逐行顯示。以下是我的代碼的片段。從數據庫查詢循環

StringBuilder sb = new StringBuilder(); 

sb.append(reportBO.projectList(this.getSearchBean()); 
sb,append(','); 
sb.append('\n'); 

讓說我的查詢是

SELECT * FROM PROJECT 

下面是我期望的結果。 enter image description here

+0

寫入csv文件的代碼在哪裏? –

+0

您能否給出您從數據庫中查詢的數據示例,以及CSV文件中應該顯示的內容,它將如何顯示? –

+0

PrintWriter pw = new PrintWriter(new File(「test.csv」)); pw.write(sb.toString()); ...這是我如何寫入CSV文件,我已經編輯了排隊 – watermelon

回答

0

以下是我如何解決我的解決方案。希望它能幫助別人。感謝所有幫助..

for (int i = 0; i < ((List<BaseDTOInf>) getProjectList(searchBean)).size();i++) { 

       BaseDTO list = (BaseDTO) getProjectList(searchBean).get(i); 
       list.getDataMap().get("A"); 
       list.getDataMap().get("B"); 
       list.getDataMap().get("C"); 
       list.getDataMap().get("D"); 
       list.getDataMap().get("E"); 
       list.getDataMap().get("F"); 

       sb.append(list.getDataMap().get("A")); 
       sb.append(','); 
       sb.append(list.getDataMap().get("B")); 
       sb.append(','); 
       sb.append(list.getDataMap().get("C")); 
       sb.append(','); 
       sb.append(list.getDataMap().get("D")); 
       sb.append(','); 
       sb.append(list.getDataMap().get("E")); 
       sb.append(','); 
       sb.append('\n'); 

      } 
1

循環的結果集如下所述,並將其寫入到文件,

while (rs.next()){ 
     sb.append(rs.getString(<ColumnName1>)); 
     sb.append(','); 
     sb.append(rs.getString(<ColumnName2>)); 
     sb.append(','); 
     sb.append(rs.getString(<ColumnName3>)); 
     sb.append('\n'); 
    } 

如果你將數據填充到StringBuffer然後確保它被寫入到在固定時間間隔的文件(例如,每1000行)。否則,如果結果包含大量行,則可能得到OutOfMemoryException

0

您需要一個CSV編寫器來正確處理這個問題。值可以包含逗號,引號,換行符,並且必須正確轉義。

從您的代碼看來,您似乎正在嘗試編寫bean,而不是直接從ResultSet中獲取東西。在這種情況下,你可以嘗試univocity-parsers

//creates a configuration object that allows you to determine how to 
//format your CSV output, among many other things. Check the tutorial. 
CsvWriterSettings settings = new CsvWriterSettings(); 

//Configures the parser to process input objects using the BeanWriterProcessor. 
//This reads the data from your java beans. In this case the type is "TestBean" 
//but in yours it seems that would be something like "SearchBean". 
settings.setRowWriterProcessor(new BeanWriterProcessor<TestBean>(TestBean.class)); 

//Defines the headers to print out to the output. My "TestBean" class has the 
//following fields. Adjust this to reflect the fields in your "SearchBean" 
settings.setHeaders("amount", "pending", "date", "quantity", "comments"); 

// Creates a CsvWriter with the settings above 
CsvWriter writer = new CsvWriter(new FileWriter(new File("/path/to/file.csv")), settings); 

//Loads the beans from the database. 
//The "loadBeanList" method is something you should implement. 
List<TestBean> beansToPersist = loadBeanList(); 

//With a list of beans loaded from the database, you can simply call this 
//and write everything into your CSV file. You can also write beans one by one. 
writer.processRecordsAndClose(beansToPersist); 

披露:我是這個庫的作者。它是開放源代碼和免費的(Apache V2.0許可證)。

+0

嗨..感謝您指出我的錯誤:)但是,你能解釋更多的解決方案,因爲我不太瞭解它。提前致謝。 @JeronimoBackes – watermelon

+0

爲代碼添加註釋以清楚說明。 –