如何在使用LOAD DATA命令时跳过csv文件的行?

时间:2010-08-02 09:45:05

标签: java sql mysql csv

我正在使用sql命令加载数据将csv文件中的数据插入到mysql数据库中。问题是在文件的末尾有一些像“,,,,,,,,,,,,,,,,,”的行(csv文件是excel文件的转换)。所以当sql到达那些行时,他发给我:#1366 - 不正确的整数值:''对于第661行的列'Bug_ID'。 'bug_id'是一个int,我有32列。

我怎么能告诉他忽略那些线,考虑到存档线的数量是可变的?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

MySQL在读取分隔文本文件时支持“LINES STARTING BY”xxxx“'。如果可以,请要求您的特定.CVS文件使每个数据行都带有“前缀”,而非数据行则不具有该前缀。如果需要,这使您能够将注释放入.CSV。

MySQL Doc:Load Data InFile

你可以:

步骤1 - (可选)导出数据:

SELECT * 
  INTO OUTFILE "myFile.csv"
  COLUMNS TERMINATED BY ','
  OPTIONALLY ENCLOSED BY '"'
  ESCAPED BY '\\'
  LINES STARTING BY 'DATA:'
  TERMINATED BY '\n'
FROM table

第2步 - 导入数据

LOAD DATA INFILE "myFile.csv"
INTO TABLE some_table
     COLUMNS TERMINATED BY ','
     OPTIONALLY ENCLOSED BY '"'
     ESCAPED BY '\\'
     LINES STARTING BY 'DATA:'

有效地,您可以将.csv文件修改为如下所示:

# Comment for humans
// Comment for humans
Comments for us humans.
DATA:1,3,4,5,6,'asdf','abcd'
DATA:4,5,6,7,8,'qwerty','zxcv'
DATA:9,8,7,6,5,'yuio','hjlk'
# Comments for humans
// Comments for humans
Comments for humans
DATA:13,15,64,78,54,'bla bla','foo bar'

构造将只解释/读取带有'DATA:'前缀的行。

我使用这种技术为需要外部控制信息的SQL脚本创建'config'文件。但是有一个人类元素需要能够轻松地操作.csv文件并理解其内容。

- J Jorgenson -

答案 1 :(得分:0)

我修好了它: 我刚刚在我的csv解析器中添加了一个条件

while((line = is.readLine())!= null){

  if (!line.equals(",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"))
      {
  Iterator e = csv.parse(line).iterator();
      ......
      }

}