使用JDBC在PostgreSQL中批量插入

时间:2013-10-14 00:14:36

标签: java postgresql batch-file jdbc

我想使用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将其推送到数据库中?

2 个答案:

答案 0 :(得分: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.

看起来您的数据是制表符分隔符。所以使用默认值应该有效。

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

答案 1 :(得分:1)

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

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

我不相信COPY直接支持其中任何一个,因此需要进行一些转换。此外,-9999.00看起来像一个应该转换为NULL的魔术值。