使用 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
Convert Resultset to CSV file using Java
提问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);