2

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

4

2 回答 2

1

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

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

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

于 2013-10-14T16:12:52.690 回答
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);
于 2013-10-14T00:29:32.367 回答