在MySql中包含逗号的CSV中的数据插入失败

时间:2014-08-13 11:45:49

标签: java mysql opencsv

我有一个CSV文件,其记录如下                 CUSTOMER_ID PRODUCT_ID TIME_ID ACCOUNT_NUM个LNAME FNAME

            4728,   1   ,369 ,  37128682 ,  Gomez,  Joanne

其中一条记录包含一个逗号位于2996,6,550,2413173,Taylor, Jr.,Emmett

之间的字段

我编写了以下java代码,用于在mysql数据库中插入记录。

public class Test1 {

public static void main(String args[])throws Exception
{
 try{
    Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Samesh",   "root", "root");
    Statement stmt = con.createStatement();

         CSVReader reader = new CSVReader(new        FileReader("C://Users/ODC/Desktop/out.csv"));

        String [] nextLine;

        while ((nextLine = reader.readNext()) != null) {
             stmt.executeUpdate("insert into       customer(CUSTOMER_ID,PRODUCT_ID,TIME_ID,ACCOUNT_NUM,LNAME,FNAME,GENDER,PRODUCT_NAME)"+"values ("+nextLine[0]+","+nextLine[1]+","+nextLine[2]+","+nextLine[3]+",'"+nextLine[4]+"','"+nextLine[5]+");
            }
}catch(Exception e)
 {
    e.printStackTrace();
 }
}

}

现在,当我的程序在字段中用逗号读取该记录时,它将该字段拆分为两个值,并且我的数据插入失败。

这里使用replaceAll(“,”,“”)方法不会有帮助。

任何人都可以帮助解决其他问题。

谢谢

4 个答案:

答案 0 :(得分:0)

如果某个值在字段中有逗号,则必须用“field,content”包围。

如果您在Excel中创建这些案例并将其保存到csv,也可以进行测试。

答案 1 :(得分:0)

如果您可以控制csv的生成,那么您有几个选择。

您可以使用不会出现在任何数据字段中的特殊字符(例如*)将每个字段括起来,然后您可以在新的CSVReader中指定您正在使用的分隔符,或者您也可以单独使用标签而不是逗号和

CSVReader reader = new CSVReader(new FileReader("C://Users/ODC/Desktop/out.csv"), ',', '"');

CSVReader reader = new CSVReader(new FileReader("C://Users/ODC/Desktop/out.csv"), '\t');

答案 2 :(得分:0)

如果没有先控制输入文件,就不应该将输入文件发送到数据库中。

如果是一次性或手动操作,你应该至少控制每行的字段数,在出现问题时中止整个文件(说明在哪一行)并让人类编辑并手动修复它 - 与程序相比,人类对不可预见的事情更加适应。

如果是在自动操作中,您应该在特殊文件中写入违规行,插入其他行,同样让人解决问题,并在校正后启动单独的插入。

但是接受正常输入的csv文件,其中字段可以包含分隔符而不使用周围的引号是一般设计错误:csv文件不正确,应该在生成级别进行更正。

答案 3 :(得分:0)

您的CSV源出现问题,请将csv源文件更改为以下

"4728",   "1"   ,"369" ,  "37128682" ,  "Gomez,  Joanne"

我相信OpenCSV可以很好地处理它。