使用Java将Resultset转换为CSV文件

JSR*_*JSR 2 java csv resultset

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

Field中的值以csv为单位

[<333message:脚本中的运行时错误'ProcessItem:'Type:'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++;   
            }  
Run Code Online (Sandbox Code Playgroud)

Jac*_*obi 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);
Run Code Online (Sandbox Code Playgroud)


Rav*_*yal 3

获取可能包含新行的列的值,如下所示

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

您也可以过滤所有列,但这会导致性能受到一些影响。