使用 Java 将结果集转换为 CSV 文件

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18128802/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 22:34:34  来源:igfitidea点击:

Convert Resultset to CSV file using Java

javacsvresultset

提问by JSR

Hi I am trying to convert oracle jdbc resultset to csv file. Below is the code used. Issue occures when there is value like below in the field. It deforms the output csv and all this come in separate line rather than in one field.

嗨,我正在尝试将 oracle jdbc 结果集转换为 csv 文件。下面是使用的代码。当字段中有如下值时会出现问题。它使输出 csv 变形,所有这些都在单独的行中而不是在一个字段中。

Value in Field comes in csv as

字段中的值以 csv 形式出现

[<333message:Runtime error in script' ProcessItem: ' Type: 'ITEM'" 1:0).Internal Script error: java.lang.NullPointerException
Script (line 1):
setHours = 0 ;
if(ts.instanceId == null)
" 3 : ts.instanceId = 0 ;"
Step >]

[<333message:Runtime error in script' ProcessItem: ' Type: 'ITEM'" 1:0). 内部脚本错误: java.lang.NullPointerException
Script (line 1):
setHours = 0 ;
if(ts.instanceId == null )
" 3 : ts.instanceId = 0 ;"
步骤 >]

int ncols = result.getMetaData().getColumnCount();  

            System.out.println("ColumnCout"+ncols);  
            FileOutputStream fos=new FileOutputStream(new File("C:\test.csv"),false);  
            Writer out = new OutputStreamWriter(new BufferedOutputStream(fos),"UTF_8");      

            for (int j=1; j<(ncols+1); j++) {     
            out.append(result.getMetaData().getColumnName (j));       
            if (j<ncols) out.append(","); else out.append("\r\n");      
            }   
            int m =1;    

            while (result.next()) {   

            for (int k=1; k<(ncols+1); k++) {   

            out.append(result.getString(k));    

            if (k<ncols) out.append(","); else out.append("\r\n");    
            }   
            //System.out.println("No of rows"+m);   
            m++;   
            }  

采纳答案by Ravi Thapliyal

Get the value for the column that could have new linesas

获取,可能有列中的值新线

String multiLine = null;
if (k == <col_index> && (mutiLine = rs.getString(k)) != null)
    out.append(multiLine.replaceAll("\n", ""));
else
    out.append(result.getString(k));

You could filter all the columns as well but then would incur some performance hit.

您也可以过滤所有列,但会导致一些性能下降。

回答by Jacobi

Are you using "java.sql.ResultSet" class? If yes, see the library in this link http://opencsv.sourceforge.net/

你在使用“java.sql.ResultSet”类吗?如果是,请参阅此链接中的库http://opencsv.sourceforge.net/

See an example:

看一个例子:

CSVWriter csvWriter = new CSVWriter(new FileWriter("yourfile.csv"), '\t');
java.sql.ResultSet myResultSet = .... ;
csvWriter.writeAll(myResultSet, includeHeaders);