2013-10-14 91 views
2

我想使用JDBC将文件插入到postgresql中。 我知道下面的命令来使用,但下载的文件不与定界符分析(“|”或“”)使用JDBC在PostgreSQL中批量插入

Filereader fr = new FileReader("mesowest.out.txt"); 
    cm.copyIn("COPY tablename FROM STDIN WITH DELIMITER '|'", fr); 

我的文件是这样的:

ABAUT 20131011/0300  8.00 37.84 -109.46 3453.00 21.47  8.33 241.90 
ALTU1 20131011/0300  8.00 37.44 -112.48 2146.00 -9999.00 -9999.00 -9999.00 
BDGER 20131011/0300  8.00 39.34 -108.94 1529.00 43.40  0.34 271.30  
BULLF 20131011/0300  8.00 37.52 -110.73 1128.00 56.43  8.07 197.50  
CAIUT 20131011/0300  8.00 38.35 -110.95 1381.00 54.88  8.24 250.00  
CCD 20131011/0300  8.00 40.69 -111.59 2743.00 27.94  8.68 285.40 

所以我的问题是..是否有必要追加分隔符到这个文件使用jdbc将它推入数据库?

回答

1

从Postgres的文档

delimiter : The single character that separates columns within each row (line) of the file. The default is a tab character in text mode, a comma in CSV mode.

它看起来像你的数据是标签delimeted。所以使用默认应该工作。

Filereader fr = new FileReader("mesowest.out.txt"); 
cm.copyIn("COPY tablename FROM STDIN", fr); 
1

您需要以某种方式转换文件,是的。

它看起来目前是由可变数量的空格分隔的,或者它有固定宽度的字段。不同的是,如果将2146.00更改为312146.00,会发生什么情况?它会碰到像“-112.48312146.00”之类的前一个字段,就像固定宽度一样,或者是否会添加空格,即使这会破坏列对齐?

我不相信这些都是COPY直接支持的,所以有些转换是必要的。此外,-9999.00看起来像是一个应该转换为NULL的魔法值。