我有一个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(“,”,“”)方法不会有帮助。
任何人都可以帮助解决其他问题。
谢谢
答案 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可以很好地处理它。