使用Java将Sql结果设置为Csv,由于文本中的分号字符而无法解析

时间:2017-05-31 07:54:05

标签: java mysql sql excel csv

我正在尝试将SQL结果集解析为CSV,到目前为止我成功了。但是当我试图解析像

这样的东西时
<span style="color: rgb(0,0,0); font-family: 'Times New Roman'; </span> this, it sees that as a header column and puts that in there.

我的预期结果是:

Name; |Notes;|Version;|Status

Name1;|<span style="color: rgb(0,0,0); font-family: 'Times New Roman'; </span>;| 1;| Active |

但不是那样,我得到了这个

Name;|Notes;|Version;|Status

Name1;|<span style="color: rgb(0,0,0);| font-family: 'Times New Roman';| </span>;| 1;| Active|

当我在MySQL上尝试这个查询时,它的表很好地显示了它,但是当我将它转换为CSV文件并在excel中打开它时,由于Notes区域中的分号,这是灾难性的。知道如何解决这个问题吗?

修改

我的问题在于Excel,它是如何看待我的数据并解析它错误的,因为一列包含分号,它将该列分成更多。有没有办法让我做一些事情,比如将它存储在引号或其他内容中?

预期结果 Expected Result:

有问题的结果: Problematic Result

编辑2:

 public void writeWithOpenCsv (String filename, List<String[]> rows) throuws IO Exception{
     try (CSVWriter writer = new CSVWriter(new FileWriter(filename))){
          writer.writeAll(rows);
         }
    }

1 个答案:

答案 0 :(得分:0)

问题不在于代码,而在于excel和CSV的格式。

我了解到有办法解决这个问题。 如果您的列内容包含您的解析分隔符,例如&#39;;&#39;或&#39;,&#39;你可以使用引号(&#34;)来解决这个问题。

例如:

  

名称;数字//这些是标题

     

沙美; 14; 3; 2

当excel打开它时就像

一样
Name  | Numbers |     |
Samed |    14   |  3  |  2

所以,像mysql一样,大多数东西都不能导入它,因为它超出了标题范围。

当你引用时,它没有看引号字符和Samed;&#34; 14; 3; 2;&#34;数据将如下所示:

  

名称;编号

     

沙美;&#34; 14; 3; 2&#34;

Name  | Numbers   |   
Samed |  14;3;2   |    

但是如果您的数据是代码并包含引号(&#34;)字符(我的),您可以通过输入

更改您的分隔符
  

月= $

     

名称$编号

     

沙美$ 14#34; 3; 2

它将给出结果

Name  | Numbers   |   
Samed |  14";3;2  | 

请记住,在mysql导入向导中,它不会显示类似&#34; $&#34;用作分隔符。

为此你可以使用sql查询:

LOAD DATA LOCAL INFILE 'C:\test.csv'
INTO TABLE test.testColumns
TERMINATED BY '$'
LINES TERMINATED BY '\n'

它会正常工作