使用Java将Resultset转换为CSV文件

时间:2013-08-08 14:34:32

标签: java csv resultset

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

字段中的值以csv格式显示为

  

[< 333message:脚本'ProcessItem中的运行时错误:'类型:'ITEM'“1:0)。内部脚本错误:java.lang.NullPointerException
      脚本(第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++;   
            }  

2 个答案:

答案 0 :(得分:14)

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

查看示例:

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

答案 1 :(得分:2)

获取可能新行的列的值为

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

您也可以过滤所有列,但这样会产生一些性能损失。