5

您好我正在尝试将 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++;   
            }  
4

2 回答 2

22

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

看一个例子:

CSVWriter csvWriter = new CSVWriter(new FileWriter("yourfile.csv"), '\t');
java.sql.ResultSet myResultSet = .... ;
csvWriter.writeAll(myResultSet, includeHeaders);
于 2013-08-08T14:41:03.670 回答
3

获取可能有新行的列的值

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

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

于 2013-08-08T15:17:08.400 回答