您好我正在尝试将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++;
}
答案 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));
您也可以过滤所有列,但这样会产生一些性能损失。