2013-10-14 88 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的魔法值。