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



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

            4728,   1   ,369 ,  37128682 ,  Gomez,  Joanne

其中一条记录包含一个字段,在2996、6、550、2413173、Taylor、Jr之间有逗号。,艾美特

我写了下面的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(",",")方法是没有用的。

有谁能提供其他解决方法吗?

谢谢

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

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

如果您可以控制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');

你不应该在没有控制它的情况下将输入文件发送到数据库。

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

如果是在自动操作中,你应该把有问题的行写在一个特殊的文件中,插入其他的行,同样让人来解决问题,并在纠正后单独插入。

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

您的CSV源文件有问题,更改您的CSV源文件如下

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

我相信OpenCSV可以处理得很好

相关内容

  • 没有找到相关文章

最新更新