我正在使用sql命令加载数据将csv文件中的数据插入到mysql数据库中。问题是在文件的末尾有一些像“,,,,,,,,,,,,,,,,,”的行(csv文件是excel文件的转换)。所以当sql到达那些行时,他发给我:#1366 - 不正确的整数值:''对于第661行的列'Bug_ID'。 'bug_id'是一个int,我有32列。
我怎么能告诉他忽略那些线,考虑到存档线的数量是可变的?
感谢您的帮助。
答案 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)
while((line = is.readLine())!= null){
if (!line.equals(",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"))
{
Iterator e = csv.parse(line).iterator();
......
}
}